เซิร์ฟเวอร์เดี่ยวสมัยใหม่ใด ๆ ก็สามารถใช้เซิร์ฟเวอร์ได้ ลูกค้าหลายพันรายในครั้งเดียว ซอฟต์แวร์เซิร์ฟเวอร์ HTTP นั้นต้องเป็นแบบ Event-Driven (IOCP) (เราไม่ได้อยู่ใน Apache หนึ่งการเชื่อมต่อเก่า = หนึ่งเธรด / สมการกระบวนการอีกต่อไป) แม้แต่เซิร์ฟเวอร์ HTTP ที่สร้างขึ้นใน Windows (http.sys) นั้นเป็น IOCP ที่มุ่งเน้นและมีประสิทธิภาพมาก (ทำงานในโหมดเคอร์เนล) จากมุมมองนี้จะไม่มีความแตกต่างอย่างมากระหว่างการปรับขนาดระหว่าง WebSockets และการเชื่อมต่อ HTTP ปกติ การเชื่อมต่อ TCP / IP หนึ่งครั้งใช้ทรัพยากรเพียงเล็กน้อย (น้อยกว่าเธรดมาก) และระบบปฏิบัติการที่ทันสมัยได้รับการปรับให้เหมาะสมสำหรับการจัดการการเชื่อมต่อที่เกิดขึ้นพร้อมกันจำนวนมาก: WebSockets และ HTTP เป็นเพียงโปรโตคอลชั้นแอปพลิเคชัน OSI 7
แต่จากการทดสอบฉันเห็นปัญหาหลักสองประการเกี่ยวกับ WebSockets:
- พวกเขาไม่สนับสนุน CDN
- พวกเขามีปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น
ดังนั้นฉันขอแนะนำสิ่งต่อไปนี้สำหรับโครงการใด ๆ :
- ใช้ WebSockets สำหรับการแจ้งเตือนลูกค้าเท่านั้น (ด้วยกลไกทางเลือกในการโพลแบบยาว - มีไลบรารีอยู่มากมาย)
- ใช้ RESTful / JSON สำหรับข้อมูลอื่นทั้งหมดโดยใช้ CDN หรือพร็อกซีสำหรับแคช
ในทางปฏิบัติแอปพลิเคชัน WebSockets เต็มรูปแบบมีขนาดไม่ดี เพียงใช้ WebSockets สำหรับสิ่งที่พวกเขาออกแบบมาเพื่อ: แจ้งเตือนผลักดันจากเซิร์ฟเวอร์ไปยังลูกค้า
เกี่ยวกับปัญหาที่อาจเกิดขึ้นจากการใช้ WebSockets:
1. พิจารณาการใช้ CDN
วันนี้ (เกือบ 4 ปีต่อมา) การปรับขนาดเว็บเกี่ยวข้องกับการใช้ส่วนหน้าของเครือข่ายการจัดส่งเนื้อหา (CDN) ไม่เพียง แต่สำหรับเนื้อหาแบบคงที่ (html, css, js) แต่ยังข้อมูลแอปพลิเคชัน (JSON) ของคุณคุณ
แน่นอนคุณจะไม่ใส่ข้อมูลทั้งหมดในแคช CDN ของคุณ แต่ในทางปฏิบัติเนื้อหาทั่วไปจำนวนมากจะไม่เปลี่ยนแปลงบ่อยนัก ฉันสงสัยว่า 80% ของทรัพยากร REST ของคุณอาจถูกแคช ... แม้แต่หนึ่งนาที (หรือ 30 วินาที) การหมดเวลาหมดอายุของ CDN อาจเพียงพอที่จะทำให้เซิร์ฟเวอร์ส่วนกลางของคุณมีชีวิตใหม่และปรับปรุงการตอบสนองของแอปพลิเคชันได้มากเนื่องจาก CDN ปรับทางภูมิศาสตร์ ...
สำหรับความรู้ของฉันยังไม่มีการสนับสนุน WebSockets ใน CDN และฉันสงสัยว่ามันจะไม่เป็นเช่นนั้น WebSockets เป็น statefull ในขณะที่ HTTP ไร้สัญชาติดังนั้นแคชจะง่ายกว่ามาก ในความเป็นจริงเพื่อให้ WebSockets เป็นมิตรกับ CDN คุณอาจต้องเปลี่ยนไปใช้วิธี RESTful แบบไร้สัญชาติ ... ซึ่งจะไม่เป็น WebSockets อีกต่อไป
2. ปัญหาด้านความปลอดภัย
WebSockets มีปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นโดยเฉพาะเกี่ยวกับการโจมตีของ DOS สำหรับภาพประกอบเกี่ยวกับช่องโหว่ด้านความปลอดภัยใหม่ให้ดูชุดสไลด์และตั๋ว webkitนี้
WebSockets หลีกเลี่ยงโอกาสในการตรวจสอบแพ็คเก็ตที่ระดับเลเยอร์แอปพลิเคชัน OSI 7 ซึ่งมาเป็นมาตรฐานในทุกวันนี้ในด้านความปลอดภัยทางธุรกิจ ในความเป็นจริง WebSockets ทำให้การส่งข้อมูลสับสนดังนั้นอาจเป็นการละเมิดความปลอดภัยที่สำคัญ