2014-06-07 15 views
8

Nếu tôi có kết nối websocket mở giữa máy chủ và máy khách, có đúng là không có dữ liệu hoặc băng thông nào được sử dụng hoặc trao đổi giữa hai ngoại trừ khi tôi gửi một số? Và nếu đó là sự thật, điều đó có nghĩa là tôi có thể có hàng nghìn kết nối mở trên một máy chủ tại một thời điểm miễn là dữ liệu chỉ được chuyển rất thường xuyên?Các máy chủ web mở có sử dụng băng thông hoặc các tài nguyên khác không?

Trả lời

3

Về mặt kỹ thuật, có. Mặc dù giao thức WebSocket có khung ping/pong, và bất kỳ của hai đầu có thể gửi ping định kỳ và mong đợi pongs như câu trả lời, nếu không thì sẽ giết kết nối.

Sẽ là một ý tưởng tồi tệ nếu bạn không triển khai cơ chế "tiếp tục sống", bạn sẽ không thể biết được kết nối nào thực sự được kết nối hoặc đóng không đúng cách.

http://blog.stephencleary.com/2009/05/detection-of-half-open-dropped.html

+1

Một số người trong chúng ta tin rằng keepalives là một mụn cóc lớn trên TCP, làm cho nó không cần thiết mong manh trên băng thông thấp, các liên kết có độ tin cậy thấp (_e.g._, thông tin liên lạc vệ tinh nghiệp dư). –

+3

Đừng quên các tài nguyên không phải băng thông. Trên hầu hết các hệ thống, một kết nối TCP mở (_e.g._, một WebSocket) tiêu thụ nhiều tài nguyên giới hạn, ngay cả khi không có lưu lượng gói. Bộ nhớ đệm và khối điều khiển kết nối là phổ biến nhất, nhưng trong một số hệ thống, số cổng cũng có. –

+1

Ping/pong khung có thể là nhỏ như hai byte, và để có hàng ngàn kết nối với hoạt động nhỏ không phải là vấn đề cho bất kỳ máy tính hiện đại. Tôi làm thử nghiệm hiệu suất với hàng ngàn người trong số họ trên máy tính xách tay của tôi là máy chủ. Vì thiết bị di động có thể mất kết nối mà không đóng đúng kết nối, nên có cơ chế duy trì hoạt động. – vtortola

Các vấn đề liên quan