Bất kỳ máy chủ đơn hiện đại nào cũng có thể phục vụ hàng ngàn khách hàng cùng một lúc . Phần mềm máy chủ HTTP của nó đã được định hướng theo hướng Sự kiện (IOCP) (chúng tôi không còn trong một kết nối Apache cũ = một phương trình / luồng xử lý nữa). Ngay cả máy chủ HTTP được tích hợp trong Windows (http.sys) cũng được định hướng IOCP và rất hiệu quả (chạy ở chế độ kernel). Từ quan điểm này, sẽ không có nhiều sự khác biệt về tỷ lệ giữa WebSockets và kết nối HTTP thông thường. Một kết nối TCP / IP sử dụng một ít tài nguyên (ít hơn một luồng) và HĐH hiện đại được tối ưu hóa để xử lý nhiều kết nối đồng thời: WebSockets và HTTP chỉ là các giao thức lớp ứng dụng OSI 7, kế thừa từ thông số kỹ thuật TCP / IP này.
Nhưng, từ thử nghiệm, tôi đã thấy hai vấn đề chính với WebSockets:
- Họ không hỗ trợ CDN;
- Họ có vấn đề bảo mật tiềm năng.
Vì vậy, tôi muốn giới thiệu như sau, cho bất kỳ dự án:
- Chỉ sử dụng WebSockets cho thông báo của khách hàng (với cơ chế dự phòng để bỏ phiếu dài - có rất nhiều thư viện xung quanh);
- Sử dụng RESTful / JSON cho tất cả các dữ liệu khác, sử dụng CDN hoặc proxy cho bộ đệm.
Trong thực tế, các ứng dụng WebSockets đầy đủ không mở rộng tốt. Chỉ cần sử dụng WebSockets cho những gì chúng được thiết kế để: đẩy thông báo từ máy chủ đến máy khách.
Về các vấn đề tiềm ẩn khi sử dụng WebSockets:
1. Cân nhắc sử dụng CDN
Hôm nay (gần 4 năm sau), quy mô web liên quan đến việc sử dụng giao diện người dùng Nội dung Mạng phân phối (CDN), không chỉ cho nội dung tĩnh (html, css, js) mà còn cả dữ liệu ứng dụng (JSON) của bạn .
Tất nhiên, bạn sẽ không đặt tất cả dữ liệu của mình vào bộ đệm CDN, nhưng trên thực tế, rất nhiều nội dung phổ biến sẽ không thay đổi thường xuyên. Tôi nghi ngờ rằng 80% tài nguyên REST của bạn có thể được lưu trữ ... Thậm chí chỉ một phút thời gian hết hạn CDN (hoặc 30 giây) có thể đủ để cung cấp cho máy chủ trung tâm của bạn một hoạt động mới và tăng cường khả năng phản hồi của ứng dụng rất nhiều, vì CDN có thể được điều chỉnh theo địa lý ...
Theo hiểu biết của tôi, chưa có hỗ trợ WebSockets trong CDN và tôi nghi ngờ nó sẽ không bao giờ như vậy. WebSockets là trạng thái đầy đủ, trong khi HTTP là không trạng thái, do đó rất dễ lưu trữ. Trên thực tế, để làm cho WebSockets CDN thân thiện, bạn có thể cần phải chuyển sang cách tiếp cận RESTful không trạng thái ... sẽ không còn là WebSockets nữa.
2. Vấn đề bảo mật
WebSockets có các vấn đề bảo mật tiềm ẩn, đặc biệt là về các cuộc tấn công của DOS. Để minh họa về các lỗ hổng bảo mật mới, hãy xem bộ slide này và vé webkit này .
WebSockets tránh mọi cơ hội kiểm tra gói ở cấp lớp ứng dụng OSI 7, hiện đang trở thành tiêu chuẩn khá, trong bất kỳ bảo mật kinh doanh nào. Trong thực tế, WebSockets làm cho việc truyền tải bị xáo trộn, do đó có thể là một vi phạm lớn về rò rỉ bảo mật.