2015-04-09 16 views
19

Những gì tôi có: Máy chủ ứng dụng C++ đang chạy, Sẵn sàng gửi dữ liệu tới ứng dụng khách được cho là một trang hoặc ứng dụng HTML5.Làm thế nào để nói chuyện với ổ cắm UDP với HTML5?

Những gì tôi muốn: Có cách nào để giao tiếp sử dụng cổng udp với HTML5 cho cả máy chủ C++ và HTML5 ứng dụng được địa phương vào hệ thống?

Những gì tôi biết:

  • Vì an ninh lo ngại, JS không cho phép giao tiếp cổng UDP từ trình duyệt.
  • Đã đọc ở nhiều nơi, Câu trả lời là không. Nhưng câu trả lời là cũ.

Câu trả lời vẫn là 'KHÔNG'?

Có thể làm việc xung quanh không?

Bất kỳ khách hàng tiềm năng nào được đánh giá cao.

+0

ứng dụng chrome có thứ gì đó tương tự trong API, tôi nghĩ vậy. bạn có thể sử dụng một cái gì đó ngoài udp để đẩy từ C++, ví dụ như SSE? – dandavis

+1

Sử dụng câu trả lời html5 vẫn là 'KHÔNG'. Websocket luôn là tcp. Hỗ trợ Webrtc TCP/UDP phụ thuộc vào tường lửa nhưng về cơ bản nó là dành cho truyền thông lê. Nếu bạn muốn sử dụng webrtc, bạn sẽ phải triển khai webrtc trên máy chủ của mình – Samir

+0

Câu trả lời ngắn. Tôi chỉ đơn giản là đóng bản sao này nhiều lần đã được hỏi ở đây trước đây, nhưng câu trả lời ở nơi khác đáng ngạc nhiên là kém. Các vấn đề về bảo mật khá là quá rõ ràng - nó sẽ là tầm thường để ngăn chặn các cuộc tấn công khuếch đại đã chứng minh phiền hà với DNS và NTP.Những lý do tôi nhận thức được rằng 1) nó không cần thiết cho hầu hết những gì một trình duyệt hiện 2) rất khó thực hiện trên internet do NAT. – symcbean

Trả lời

12

Có, câu trả lời vẫn là 'không'. Websockets dựa trên TCP. Lưu ý rằng WebSocket không phải là một kết nối TCP đơn giản, có giao thức HTTP và một giao thức khung tại chỗ. Vì vậy, bạn cũng không thể tạo một kết nối TCP đồng bằng trong Javascript.

WebRTC được dựa trên UDP, nó có thể bao gồm các trường hợp sử dụng của bạn: http://www.html5rocks.com/en/tutorials/webrtc/datachannels/

+0

Cảm ơn bạn đã dành thời gian. Nó sẽ cần một máy chủ web cũng? Nếu tôi không sai, tôi sẽ cần phải sử dụng giao thức WebRTC trong ứng dụng C++ của tôi, phải không? – mkkhedawat

+3

Vâng, WebRTC sẽ cần một vài thứ để hoạt động, vì nó là công nghệ ngang hàng, bạn có thể cần một máy chủ trung gian để thực hiện STUN/TURN/ICE để bắt đầu giao tiếp giữa các đồng nghiệp. Nó không phải là một cách tiếp cận tầm thường, vì vậy đi qua các tài liệu trước khi nhảy vào quyết định :) WebRTC không phải là "cách" của việc sử dụng UDP trong web, nhưng nó sử dụng UDP như giao thông, vì vậy nó có thể phù hợp với yêu cầu của bạn. – vtortola

5

Chrome giờ đây dường như có một cái gì đó: https://developer.chrome.com/apps/sockets_udp

+3

Đến đây từ một câu hỏi khác - điều đáng nói là API này chỉ có thể truy cập được đối với các ứng dụng/tiện ích mở rộng của Chrome. Bạn không thể sử dụng nó từ một trang web. –

+1

và các ứng dụng Chrome [sẽ bị ngừng] (https://blog.chromium.org/2016/08/from-chrome-apps-to-web.html) – James

0

Bạn có thể có thể sử dụng một công trình xung quanh, thiết kế một chương trình/script/máy chủ (Tôi sẽ sử dụng PHP, là một khách hàng html) để có được UDP gram từ máy chủ, nếu bạn muốn tôi có thể giúp đỡ, tôi đã làm việc trên một cái gì đó tương tự.

+0

Sever sẽ nói chuyện với khách hàng html qua http hoặc websockets, Cả hai dựa trên TCP. Nó sẽ đánh bại mục đích của tôi. – mkkhedawat

1

Đây là một chính issue for gamers. Xem liên kết đó để thảo luận về websockets, webrtc, quic (trong chrome) và của tác giả netcode.io

0

Bạn có thể tạo một máy chủ cục bộ bổ sung để kết nối dữ liệu giữa ứng dụng và trang web C++ của bạn.

Trang web html5 kết nối với cổng cục bộ cho phép kết nối ổ cắm web (sử dụng Flask/tornado).

Ứng dụng C++ kết nối với trình nghe UDP trên một cổng khác. Xem https://wiki.python.org/moin/UdpCommunication để thiết lập.

Máy chủ python về cơ bản tạo thành cầu nối dữ liệu trong suốt giữa cổng UDP với kết nối websocket.

+0

Tại sao đặc biệt là Python? Tại sao cần phải có một máy chủ trung gian? – Alejandro

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