JavaScript WebSockets với UDP?


80

Tôi đang viết một Ứng dụng JavaScript phải nhận một lượng lớn dữ liệu từ những người dùng khác. Nó không quan trọng nếu một số dữ liệu này bị mất. Có một số cách sử dụng JavaScript WebSockets với UDP thay vì TCP?


1
Nó có thể được thực hiện qua webRTC. Máy chủ trò chơi geckosio.github.io sử dụng kỹ thuật này.
Fost

Câu trả lời:


52

Không, không thể có giao tiếp UDP trong JavaScript. Lấy làm tiếc.


2
@TimeMachine Họ sẽ không WebSockets được xây dựng trên TCP, quá trình bắt tay ban đầu cũng được thực hiện để nó được các máy chủ web công nhận là một yêu cầu nâng cấp HTTP. Bạn có thể đọc thêm về các giao thức trong dự thảo mới nhất: tools.ietf.org/html/draft-abarth-thewebsocketprotocol-00
Ivo Wetzel

3
@IvoWetzel Tại sao điều đó có nghĩa là họ sẽ không? Tôi có thể nghĩ ra một số cách để triển khai UDP Websockets một cách an toàn.
Timmmm

33
Câu trả lời không còn cập nhật nữa: WebRTC webrtc.org cung cấp UDP (thử nghiệm) trong trình duyệt và nodejs có thể truy cập các ổ cắm udp trên máy chủ.
Mirko

Đây là [thảo luận về vấn đề này] [1] liên quan đến trò chơi. Ở đó, anh ấy bao gồm websockets, webrtc (một lựa chọn có thể cho UDP, nhưng phức tạp), quic (chỉ trong google chrome) và [netcode.io] [2] của anh ấy. [1]: gafferongames.com/post/... [2]: github.com/RedpointGames/netcode.io-browser
Xéo

Kết nối UDP / Datagram Sockets với node.js! Mô-đun dgram cung cấp triển khai các ổ cắm của UDP Datagram.
Derk Jan Speelman

56

Có vẻ như những gì bạn đang chờ đợi là WebRTC đang hoạt động theo quy trình tiêu chuẩn. WebSockets, như những người khác đã chỉ ra, chạy qua TCP do bắt đầu với Nâng cấp HTTP.


4
WebRTC trông gần như tuyệt vời, nhưng theo như tôi có thể nói thì bạn phải sử dụng RTCDataChannel để giao tiếp dữ liệu và sử dụng SCTP không hỗ trợ việc phân phối không đáng tin cậy (cần thiết cho trò chơi). Chỉnh sửa: Hủy bỏ điều đó, nó hỗ trợ một chế độ không đáng tin cậy. Bài viết hay ở đây
Timmmm

Không chỉ vậy, nó là Peer 2 Peer, không tuyệt vời cho một máy chủ độc đoán.
NiCk Newman,

11
Không có lý do gì một trong những "đồng nghiệp" không thể là máy chủ của bạn.
Chad

6

Có vẻ như câu hỏi dành cho UDP phía máy khách, nhưng vì tôi đã kết thúc ở đây ...

Bạn có thể làm UDP trong JavaScript trên máy chủ bằng cách sử dụng Node.js dgramgói .


4

Giao thức WebSockets chỉ vượt qua TCP như được xác định hiện tại.

Bạn có thể thực hiện UDP với Flash nếu bạn muốn sử dụng máy chủ RTMFP (Giao thức luồng nhắn tin thời gian thực).


1

Nếu câu hỏi này vẫn đang chờ xử lý: Tôi đã tìm thấy một dự án có tên là JNEXT và có một ví dụ sử dụng UDP. Bản thân dự án dường như bị tạm dừng nhưng ít nhất trong Firefox, nó hoạt động (nó không hoạt động với Chrome và Opera). Có thể nó là giá trị để tìm kiếm nó.


3
Nếu tôi muốn người dùng cài đặt phần mềm, tôi thậm chí có thể sử dụng Flash tốt hơn.

Flash không cung cấp cho bạn UDP.
Brian DiCasa

-4

Tôi nghĩ bạn có thể tận dụng công nghệ Silverliht 4. Bạn có thể tạo một ứng dụng Silverlight 4 để giao tiếp với máy chủ và sau đó chèn nó vào trang html. Sau đó, JavaScript của bạn có thể xây dựng kết nối TCP thông qua ứng dụng Silverlight 4!


Tôi nghĩ rằng đó là điều rất khó đối với một ứng dụng web chỉ được sử dụng bởi các nhà phát triển Mac và iPhone. ^^ '

2
Ngoài ra, Silverlight không hỗ trợ UDP "thực", chỉ UDP đa hướng và chỉ hoạt động trên mạng LAN.
Martin Ørding-Thomsen

2
Câu hỏi dành cho UDP không phải TCP
markmnl

-9

Bạn có thể viết một máy chủ WebSocket để làm proxy / cầu nối giữa TCP / UDP.


21
Điều đó sẽ đánh bại toàn bộ mục đích của UDP.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.