是否可以将UDP与socket.io一起使用?

时间:2015-12-27 23:44:19

标签: sockets tcp socket.io udp

我有一个正在研究的游戏,我听说UDP对于实时游戏来说更胜一筹。我知道socket.io使用TCP,并想知道是否有某种方法将其切换到UDP。我试过查找它,但只发现了2012年左右的帖子,其中说UDP只是在浏览器中实验性的。

3 个答案:

答案 0 :(得分:17)

从标准浏览器来看,这是不可能的。

在浏览器客户端中,socket.io使用httpwebSocket传输。 httpwebSocket都是TCP连接,而不是UDP连接。所以浏览器客户端socket.io不使用UDP - 它使用TCP。

据我所知,在常规HTML页面Javascript中可以访问的浏览器中没有标准的UDP支持,因此您甚至无法构建自己的使用UDP的层。

关于该主题的其他参考文献:

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可能是某种情况下的理想传输,但如果无法立即传送,则只需删除它即可。这有时在游戏甚至视频流中很有用,其中下一个数据包只包含下一个更新,所以如果前一个数据包没有通过,那么没什么大不了的,你不想让TCP尝试重新传输丢失的数据包。但是,浏览器不支持从网页Javascript使用UDP协议。

如果要从浏览器连接到UDP设备或服务器,则必须使用某种代理,以便浏览器代码可以通过TCP(http或webSocket)与代理通信,然后代理可以处理与设备的实际UDP通信。

可以使用来自node.js或其他非浏览器平台的socket.io库,并为您的平台中的本机UDP支持构建的socket.io编写自己的UDP传输加载项。我相信socket.io有一个可插拔的传输,所以你可以尝试自己的传输,然后配置客户端和服务器使用该传输。这在浏览器中是不可能的,因为浏览器中没有基础UDP支持可以构建您的传输,但是在非浏览器环境中,例如node.js,您可以这样做。

答案 1 :(得分:2)

虽然问题已经得到解答,但我想指出有一些方法可以用UDP实现socket.io。例如,dgram完全符合您的要求。

This is socket.io + UDP with dgram的教程。

<强>更新

Alexandre Lacheze开发了一个node.js package,它将UDP带到了浏览器。它还支持socket.io。所以答案现在已经过时了。

更新2: 事实证明它只是一个模拟的UDP。不是在浏览器上运行的实际UDP协议。

答案 2 :(得分:0)

在这种情况下使用webRTC可能是一个好主意,本质上是UDP。