如何使用 HTML5 与 UDP 套接字通信?

How to talk to UDP sockets with HTML5?

我有: 一个 C++ 应用程序服务器 运行,准备将数据发送到应该是 HTML5 页面或应用程序的客户端。

我想要什么: 鉴于 c++ 服务器和 HTML5 应用程序都是系统本地的,有没有什么方法可以使用 udp 端口​​与 HTML5 进行通信?

我所知道的:

答案还是'NO'吗?

是否有任何解决方法?

感谢任何线索。

是的,答案仍然是'no'。 Websockets 是基于 TCP 的。请注意,WebSocket 不是普通的 TCP 连接,存在 HTTP 协商和框架协议。所以你也不能在 Javascript.

中创建普通的 TCP 连接

WebRTC 基于 UDP,它可能涵盖您的用例:http://www.html5rocks.com/en/tutorials/webrtc/datachannels/

Chrome现在好像有东西:https://developer.chrome.com/apps/sockets_udp

您可以使用变通方法,设计一个 program/script/server(我会使用 PHP,作为 html 客户端)从服务器获取 UDP gram,如果您希望我能提供帮助,我做过类似的事情。

这是一个专业 issue for gamers. See that link for a discussion of websockets, webrtc, quic (in chrome), and the author's netcode.io

您也可以另外创建一个 python 本地服务器,用于桥接 C++ 应用程序和网页之间的数据。

html5 网页连接到允许网络套接字连接的本地端口(使用 Flask/tornado)。

C++ 应用程序连接到不同端口上的 UDP 侦听器。请参阅 https://wiki.python.org/moin/UdpCommunication 进行设置。

python 服务器基本上在 UDP 端口和 websocket 连接之间形成了一个透明的数据桥。

看起来 UDP for web 仍然是开发和潜在标准创建的活跃领域。发布此答案以记录截至 2020 年 5 月的一些最新信息。

以下白皮书概述了满足 "unreliable-unordered" 协议安全需求的潜在前进道路:https://gafferongames.com/post/why_cant_i_send_udp_packets_from_a_browser/

桌面 Chrome 和桌面 Firefox 的扩展正在积极开发中。 https://github.com/RedpointGames/netcode.io-browser 移动浏览器的设计方式目前阻止添加这种修改(再次出于安全原因)但可以添加。