Có lợi thế nào khi có hai kết nối websocket riêng biệt với cùng một máy chủ từ cùng một máy khách không? Với tôi điều này có vẻ là một lựa chọn thiết kế tồi, nhưng có lý do gì không/tại sao nó nên hoạt động tốt hơn?Nhiều kết nối websocket
Trả lời
Có nhiều lý do tại sao bạn có thể muốn làm điều đó nhưng có lẽ họ không phải là quá phổ biến (ít nhất là chưa):
- Bạn đã cả mã hóa và dữ liệu không được mã hóa mà bạn đang gửi/nhận được (ví dụ: một số dữ liệu cồng kềnh nhưng không nhạy cảm).
- Bạn có cả dữ liệu trực tuyến và dữ liệu nhạy cảm độ trễ: hãy tưởng tượng một trò chơi tương tác mà đôi khi đã phát trực tuyến video trong trò chơi. Bạn không muốn các luồng phương tiện truyền thông lớn trì hoãn việc nhận thông điệp trò chơi thông thường nhạy cảm với độ trễ.
- Bạn có cả văn bản (ví dụ: thông báo điều khiển JSON) và dữ liệu nhị phân (mảng được nhập hoặc đốm màu) và không muốn bận tâm thêm lớp giao thức của riêng mình để phân biệt vì WebSockets đã thực hiện điều này cho bạn.
- Bạn có nhiều giao thức con WebSocket (cài đặt tùy chọn sau URI) mà bạn hỗ trợ và trang muốn truy cập nhiều hơn một (mỗi kết nối WebSocket được giới hạn trong một giao thức con).
- Bạn có một số dịch vụ WebSocket khác nhau nằm phía sau cùng một máy chủ web và cổng. Cách khách hàng chọn cho mỗi kết nối có thể phụ thuộc vào đường dẫn URI, lược đồ URI (ws hoặc wss), giao thức con hoặc thậm chí là thư đầu tiên từ máy khách đến máy chủ.
Tôi chắc chắn có nhiều lý do khác nhưng đó là tất cả những gì tôi có thể nghĩ ra khỏi đầu của tôi.
+1 Rất nhiều thông tin! – Jonas
Tôi hiện đang tìm kiếm giải pháp cho việc có hai kết nối với cùng một websocket. Lý do của tôi:
- Tôi đã viết một trường hợp thử nghiệm trong QUnit và tôi muốn để mô phỏng nhiều khách hàng và kiểm tra các khách hàng khác nhau cho các câu trả lời đúng
tôi thấy rằng nó có thể làm cho logic client đơn giản hơn nhiều khi bạn chỉ đăng ký cập nhật các đối tượng nhất định đang được quản lý bởi máy chủ. Thay vì tạo ra một giao thức đăng ký tùy chỉnh cho một kênh, bạn chỉ có thể mở một socket cho từng phần tử.
Hãy nói rằng bạn thu được một tập hợp các yếu tố thông qua một API REST tại
http://myserver/api/some-elements
Bạn có thể đăng ký để cập nhật của một yếu tố duy nhất sử dụng một url ổ cắm như thế này:
ws://myserver/api/some-elements/42/updates
Tất nhiên một có thể cho rằng điều này không quy mô cho các trang phức tạp. Tuy nhiên, đối với những ứng dụng nhỏ và đơn giản, nó có thể làm cho cuộc sống của bạn dễ dàng hơn nhiều.
REQUEST_URI có giống nhau không? –
@Shiplu Hmm. Người ta không nên truyền tải thông tin thông qua uri vì nó được thực hiện chỉ một lần. Trong trường hợp này, giả sử ** có **. – Christian
Người đóng cử tri có thể giải thích tại sao không? ** Tại sao chính xác câu hỏi của tôi không mang tính xây dựng? ** – Christian