JavaScript如何使用UDP实现WebSockets?

90

我正在编写一个 JavaScript 应用程序,需要从其他用户那里接收大量数据。如果有一些数据丢失并不重要。是否有一种使用 UDP 而不是 TCP 的 JavaScript WebSockets 方法?


2
可以通过WebRTC完成。https://geckosio.github.io/游戏服务器使用此技术。 - Fost
8个回答

65

听起来你在等待的是正在通过标准流程的WebRTC技术。正如其他人指出的那样,WebSockets运行在TCP上,因为它们是通过HTTP Upgrade初始化的。


6
WebRTC看起来很不错,但据我所知,您必须使用RTCDataChannel进行数据通信,它使用SCTP,该协议不支持不可靠的传递(对于游戏是必需的)。编辑:取消,它确实支持不可靠模式。这篇好的文章在此 - Timmmm
不仅如此,而且它是点对点的,对于一个专制的服务器来说并不是很好。 - NiCk Newman
14
没有任何理由阻止其中一个“节点”成为您的服务器。 - Chad
WebRTC不再是唯一的方式!更近期的答案:https://stackoverflow.com/a/76815693/ - undefined

55

抱歉,JavaScript 不支持 UDP 通信,无法实现。


2
@TimeMachine 他们不会在TCP上构建WebSockets,初始握手也是为了被Web服务器识别为HTTP升级请求而进行的。您可以在最新的草案中阅读有关该协议的更多信息:http://tools.ietf.org/html/draft-abarth-thewebsocketprotocol-00 - Ivo Wetzel
3
为什么这意味着他们不会这样做?我可以想到几种实现安全UDP Websockets的方法。 - Timmmm
41
回答已经过时:WebRTC(http://www.webrtc.org/)在浏览器中提供(实验性的)UDP功能,而Node.js可以在服务器上访问UDP套接字。 - Mirko
这是与游戏相关的讨论。在那里,他涵盖了WebSockets、WebRTC(UDP的可能选择,但很复杂)、QUIC(仅限于Google Chrome)以及他的netcode.io - Diagon
UDP/Datagram Sockets 连接使用 node.js!dgram 模块提供了 UDP 数据报套接字的实现。 - Derk Jan Speelman
@ Derk Jan Speelman - 我不确定他是否想要一个能够与浏览器JavaScript一起使用的UDP实现。我没有看到任何迹象表明它可以在浏览器中工作。我认为WebRTC仍然是最好的解决方案。 - Benargee

8

看起来问题是关于客户端UDP的,但由于我最终来到这里...

你可以使用node.jsdgram在服务器上使用JavaScript进行UDP。


4

目前定义的WebSockets协议只能通过TCP连接。

如果你愿意使用RTMFP(实时消息流协议)服务器,你可以在Flash中使用UDP。具体操作可以参考这里


2
截至HTTP/3发布,浏览器有一个名为WebTransportWebTransport_API的新协议,它支持UDP协议。与WebSockets类似,但支持多个流,此前在浏览器中使用UDP的唯一方法是使用WebRTC流。

caniuse.com


1
这应该是最新的答案!更多阅读:https://developer.chrome.com/articles/webtransport/ - undefined

1
如果这个问题还没有解决: 我找到了一个名为JNEXT的项目,其中有一个使用UDP的示例。 该项目本身似乎已经暂停,但至少在Firefox中它可以工作(在Chrome和Opera中无法工作)。 也许值得去寻找一下。

3
如果我想让用户安装软件,我甚至可以更好地使用Flash。 - user142019
Flash不支持UDP。 - Brian DiCasa

-5

我认为你可以利用 Silverlight 4 技术。你可以创建一个 Silverlight 4 应用程序来与服务器通信,然后将其嵌入到 HTML 页面中。然后你的 JavaScript 可以通过 Silverlight 4 应用程序建立 TCP 连接!


我认为这对于仅供Mac和iPhone开发人员使用的Web应用程序来说非常困难。^^' - user142019
2
此外,Silverlight不支持“真正的”UDP,只支持组播UDP,并且仅在局域网上工作。 - Martin Ørding-Thomsen
2
问题是关于UDP而不是TCP。 - markmnl

-9
您可以编写一个WebSocket服务器,作为TCP/UDP之间的代理/桥接。

25
那将会违背UDP的全部用途。 - user142019

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接