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

How to talk to UDP sockets with HTML5?

本文关键字:套接字 通信 UDP 何使用 HTML5      更新时间:2023-09-26

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

我想要的:考虑到c++服务器和HTML5应用程序都是系统本地的,有没有任何方法可以使用udp端口与HTML5进行通信?

我所知道的:

  • 出于安全考虑,JS不允许从浏览器进行UDP端口通信
  • 我读过很多地方的书,答案是否定的。但是答案是陈旧的

答案仍然是否定的吗?

有什么可行的办法吗?

任何线索都将不胜感激。

是的,答案仍然是"否"。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

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

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

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

这是游戏玩家的一个主要问题。有关websocket、webrtc、quic(在chrome中)和作者的netcode.io 的讨论,请参阅该链接

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

html5网页连接到一个本地端口,该端口允许网络套接字连接(使用Flask/toronto)。

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

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

阅读所有链接和评论后,我们可以得出结论:

不,您不能从浏览器发送更新包

你可能不会,因为添加这样的功能将是网络安全的一次巨大倒退。

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