我有一款游戏正在开发中,我听说UDP对于实时游戏来说更胜一筹。我知道socket.io使用TCP,并想知道是否有某种方法将其切换到UDP。我试图查找它,但只发现从2012年左右的帖子说,UDP只是在浏览器中的实验。是否可以使用UDP与socket.io?
回答
不,这是不可能的。
socket.io
使用webSocket
运输。 webSocket
是TCP连接,而不是UDP连接。所以socket.io不使用UDP--它使用TCP。
据我所知,在普通HTML页面Javascript中可以访问的浏览器中没有标准的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实现socket.io。例如dgram完全符合您的要求。
This is socket.io + UDP与dgram的教程。
UPDATE:
Alexandre Lacheze开发出的node.js package带来UDP到浏览器。它也支持socket.io。所以现在答案已经过时了。
我想你可能会对这里描述的内容感到困惑。您的第一个引用完全在node.js上运行,并且不会在浏览器中运行。这只是在node.js中将UDP支持的示例代码。所以,这与浏览器中的UDP无关。你的第二个参考是模拟一个类似于UDP的接口,但是通过webSocket或socket.io传输(它们都是TCP连接)来运行它。这是一个在浏览器中工作的模拟UDP接口,但实际的传输是TCP,而不是UDP。所以,它们都不在浏览器中运行实际的UDP协议。 – jfriend00
第二个示例与基于服务器的代理一起使用,该代理将通过socket.io运行的此模拟UDP转换为实际的UDP可用于与来自浏览器的UDP服务进行通信,但不应该认为这是假设在浏览器中使用UDP的原因通常是使用UDP进行响应式低滞后游戏 - 事实并非如此。它很聪明,可能有一些有趣的用途,但是这个问题并不是什么问题,如何通过UDP运行socket.io。仅供参考,第二个选项中的接口名称是'SimUDP',模拟的UDP。 – jfriend00
所以,总结一下。您的答案中没有显示通过UDP运行的socket.io的实现,因此您的部分答案完全不受支持。而且,你的断言Alexandre Lacheze的软件包将UDP带入浏览器也是错误的。它带来了一个模拟的类似于UDP的接口,实际上是通过TCP在浏览器上运行的。 – jfriend00
- 1. 是否可以安全使用socket.io?
- 2. 是否可以在Flash/ActionScript中使用UDP?
- 3. 是否可以使用socket.io取消订阅MtGox API频道?
- 4. 是否可以在纯html5 websockets中使用socket.io服务器?
- 5. 是否可以使用JPCAP与Android?
- 6. 是否可以使用cin与Qt?
- 7. 是否可以使用PE与C?
- 8. 是否可以使用Catel与EntityFramework 7?
- 9. 是否可以使用Glade与Scala?
- 10. Socket.io - 是否可以使用socket.io构建除聊天应用以外的其他内容
- 11. 是否可以使用Auto_publish?
- 12. 是否可以使用clock_settime()
- 13. 是否可以使用PHP
- 14. 是否可以使用HTML
- 15. 是否可以使用URL
- 16. 是否可以使用JavaScript
- 17. iPhone是否“可以使用”?
- 18. 是否可以使用ExtJS
- 19. 是否可以使用xtk_edge?
- 20. 是否可以使用WIX
- 21. IWavePlayer.PlaybackStopped是否可以使用?
- 22. 是否可以使用JavaScript
- 23. 是否可以使用jquery
- 24. ,是否可以使用Request.UserHostAddress?
- 25. 是否可以使用css
- 26. 是否可以与孩子
- 27. 我可以在twisted.web中使用socket.io吗?
- 28. 可以使用多个socket.io事件吗?
- 29. 是否可以使用coredata使用group_concat?
- 30. 是否可以使用WF使用ExtJs?
为什么又一次downvote? Downvoters,请解释。如果你有合法的牛肉,我会纠正我的答案。浏览器中的Socket.io不能在UDP上运行。这根本不存在,因为浏览器不支持任何类型的UDP传输。如果你因为被拉马赞的回答误导而沮丧,那么请阅读下面的评论,因为答案是非常具有误导性的,并且不会提供这个问题提出的问题。 – jfriend00