我正在开发一个游戏,听说UDP在实时游戏中表现更优秀。我知道socket.io使用TCP,想知道是否有办法将其切换到UDP。我尝试搜索了一下,但只找到了2012年左右的帖子,该帖子称UDP仅在浏览器中处于试验阶段。
从标准浏览器来看,这是不可能的。
从浏览器客户端来看,socket.io
使用 http
或 webSocket
传输。 http
和 webSocket
都是 TCP 连接,而不是 UDP 连接。 因此,浏览器客户端的 socket.io 不使用 UDP,它使用 TCP。
据我所知,没有标准的 UDP 支持可以从常规 HTML 页面 JavaScript 中访问,因此您甚至无法尝试构建自己的使用 UDP 的层。
其他参考资料:
如何使用 Web RTC-JavaScript 发送 UDP 数据包?
在有些情况下,当您希望数据包尽快传送,但如果无法立即传送,则放弃该数据包时,UDP可以成为一种理想的传输方式。这在游戏甚至视频流传输中有时很有用,因为下一个数据包将只包含下一个更新,所以如果上一个数据包没有传输成功,那么也没有关系,您不想让TCP尝试重新传输丢失的数据包。 但是,浏览器不支持使用UDP协议从网页Javascript。
如果要从浏览器连接到UDP设备或服务器,则必须使用某种代理,以便您的浏览器代码可以通过TCP(HTTP或WebSocket)与代理进行通信,然后代理可以处理与设备的实际UDP通信。
您可以使用来自node.js或其他非浏览器平台的socket.io库,并为该库编写自己的UDP传输插件,该插件建立在平台本身的本机UDP支持之上。我认为,socket.io具有相对可插拔的传输功能,因此您可以尝试制作自己的传输功能,然后配置客户端和服务器都使用该传输功能。这在浏览器中是不可能的(没有安装在浏览器中的本机代码插件),因为浏览器中没有底层UDP支持可供您构建传输功能,但是在非浏览器环境中(如node.js),您可以这样做。