2015-12-27 18 views
12

Tôi có một trò chơi tôi đang làm việc và tôi nghe nói rằng UDP là cấp trên cho các trò chơi thời gian thực. Tôi biết rằng socket.io sử dụng TCP và đã tự hỏi nếu có một số cách để chuyển nó sang UDP. Tôi đã thử tìm kiếm nó nhưng chỉ tìm thấy các bài viết từ khoảng năm 2012 cho biết UDP chỉ là thử nghiệm trong các trình duyệt.Có thể sử dụng UDP với socket.io không?

Trả lời

11

Không, điều đó là không thể.

socket.io sử dụng phương tiện vận chuyển webSocket. webSocket là kết nối TCP, không phải kết nối UDP. Vì vậy, socket.io không sử dụng UDP - nó sử dụng TCP.

Tốt nhất tôi biết, không có hỗ trợ UDP chuẩn trong các trình duyệt có thể truy cập từ Javascript trang HTML thông thường.

tài liệu tham khảo khác về chủ đề này:

Why Can't I Send UDP Packets From a Browser

Reading from udp port in browser

Chrome Supports TCP and UDP Sockets

Write a chrome extension to support UDP in browser

How to send a UDP Packet with Web RTC - Javascript?

How to talk to UDP sockets with HTML5?

Reading from udp port in browser

UDP có thể là một phương tiện giao thông mong muốn cho một số trường hợp khi bạn muốn các gói tin sẽ được chuyển giao càng sớm càng tốt, nhưng nếu nó không thể được gửi ngay lập tức, sau đó chỉ cần thả nó. Điều này đôi khi hữu ích trong chơi game hoặc thậm chí video streaming nơi gói tiếp theo sẽ chỉ chứa bản cập nhật tiếp theo vì vậy nếu trước đó đã không đi qua, sau đó không có vấn đề lớn và bạn không muốn có TCP cố gắng truyền lại các gói bị mất. Tuy nhiên, các trình duyệt không hỗ trợ sử dụng giao thức UDP từ trang web Javascript.

+0

Tại sao một downvote khác? Downvoters, xin giải thích. Nếu bạn có thịt bò hợp pháp, tôi sẽ sửa câu trả lời của tôi. Socket.io trong trình duyệt KHÔNG chạy trên UDP. Điều đó chỉ đơn giản là không tồn tại vì trình duyệt không hỗ trợ giao thức UDP dưới bất kỳ hình thức nào. Nếu bạn đang downvoting vì bạn đang bị lừa bởi câu trả lời của Ramazan, sau đó xin vui lòng đọc các ý kiến ​​dưới đây mà câu trả lời là câu trả lời là rất gây hiểu lầm và không cung cấp những gì câu hỏi này được yêu cầu. – jfriend00

3

Mặc dù câu hỏi đã được trả lời, tôi muốn chỉ ra rằng có nhiều cách để thực hiện socket.io với UDP. Ví dụ: dgram thực hiện chính xác những gì bạn đang tìm kiếm.

This is hướng dẫn cho socket.io + UDP với dgram.

CẬP NHẬT:

Alexandre Lacheze phát triển một Node.js package đó sẽ đem lại UDP để trình duyệt. Nó cũng hỗ trợ socket.io. Vì vậy, câu trả lời là bằng cách nào đó đã lỗi thời.

+1

Tôi nghĩ bạn có thể nhầm lẫn về những gì được mô tả ở đây. Tham chiếu đầu tiên của bạn chạy hoàn toàn trên node.js và không chạy trong trình duyệt. Đó chỉ là mã mẫu cho bulit hỗ trợ UDP vào node.js. Vì vậy, điều đó không liên quan gì đến UDP trong trình duyệt. Tham chiếu thứ hai của bạn là mô phỏng một giao diện giống như UDP, nhưng chạy nó trên giao diện webSocket hoặc socket.io (cả hai kết nối TCP). Vì vậy, đó là một giao diện UDP mô phỏng hoạt động trong một trình duyệt, nhưng vận chuyển thực tế là TCP, chứ không phải UDP.Vì vậy, không phải trong số này đang chạy một giao thức UDP thực tế trong trình duyệt. – jfriend00

+1

Ví dụ thứ hai, khi được sử dụng với proxy dựa trên máy chủ chuyển đổi UDP mô phỏng này chạy trên socket.io thành UDP thực có thể được sử dụng để giao tiếp với dịch vụ UDP từ trình duyệt, nhưng không nên bị lừa khi nghĩ rằng đây là sử dụng UDP trong trình duyệt vì lý do người ta thường muốn sử dụng UDP cho trò chơi đáp ứng độ trễ thấp, vì nó không phải. Đó là thông minh và có thể có một số sử dụng thú vị, nhưng nó không phải là những gì câu hỏi này được hỏi đó là làm thế nào để chạy socket.io trên UDP. FYI, tên của giao diện trong tùy chọn thứ hai của bạn là 'SimUDP', mô phỏng UDP. – jfriend00

+0

Vì vậy, để tóm tắt. Không có gì trong câu trả lời của bạn cho thấy việc triển khai socket.io chạy trên UDP để một phần câu trả lời của bạn hoàn toàn không được hỗ trợ. Và, khẳng định của bạn rằng gói của Alexandre Lacheze mang UDP đến trình duyệt cũng sai. Nó mang đến một giao diện mô phỏng giống như UDP thực sự đang chạy trên TCP tới trình duyệt. – jfriend00

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