我有一个正在研究的游戏,我听说UDP对于实时游戏来说是优越的.我知道socket.io使用TCP,并想知道是否有某种方法将其切换到UDP.我试过查找它,但只发现了2012年左右的帖子,其中说UDP只是在浏览器中实验性的.
从标准浏览器来看,这是不可能的.
从浏览器客户端,socket.io
使用http
或webSocket
传输.这两个http
和webSocket
是TCP连接,而不是UDP连接.所以浏览器客户端socket.io不使用UDP - 它使用TCP.
据我所知,在常规HTML页面Javascript中可以访问的浏览器中没有标准的UDP支持,因此您甚至无法真正尝试构建自己的使用UDP的层.
关于该主题的其他参考:
为什么我不能从浏览器发送UDP数据包
从浏览器中的udp端口读取
Chrome支持TCP和UDP套接字
编写chrome扩展以支持浏览器中的UDP
如何使用Web RTC发送UDP数据包 - Javascript?
如何使用HTML5与UDP套接字通信?
从浏览器中的udp端口读取
当您希望尽快传递数据包时,UDP可能是某种情况下的理想传输,但如果无法立即传递,则只需删除它即可.这有时在游戏甚至视频流中很有用,其中下一个数据包只包含下一个更新,所以如果前一个数据包没有通过,那么没什么大不了的,你宁愿不让TCP尝试重新传输丢失的数据包.但是,浏览器不支持从网页Javascript使用UDP协议.
如果要从浏览器连接到UDP设备或服务器,则必须使用某种代理,以便浏览器代码可以通过TCP(http或webSocket)与代理通信,然后代理可以处理实际的UDP与设备通信.
可以使用来自node.js或其他一些非浏览器平台的socket.io库,并为您的平台中的本机UDP支持构建的socket.io编写自己的UDP传输加载项.我相信socket.io有一个可插拔的传输,所以你可以尝试自己的传输,然后配置客户端和服务器使用该传输.这在浏览器中是不可能的,因为浏览器中没有可以构建传输的基础UDP支持,但是在非浏览器环境(如node.js)中,您可以这样做.