2015-12-27 30 views
12

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

回答

11

不,这是不可能的。

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协议。

+0

为什么又一次downvote? Downvoters,请解释。如果你有合法的牛肉,我会纠正我的答案。浏览器中的Socket.io不能在UDP上运行。这根本不存在,因为浏览器不支持任何类型的UDP传输。如果你因为被拉马赞的回答误导而沮丧,那么请阅读下面的评论,因为答案是非常具有误导性的,并且不会提供这个问题提出的问题。 – jfriend00

3

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

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

UPDATE

Alexandre Lacheze开发出的node.js package带来UDP到浏览器。它也支持socket.io。所以现在答案已经过时了。

+1

我想你可能会对这里描述的内容感到困惑。您的第一个引用完全在node.js上运行,并且不会在浏览器中运行。这只是在node.js中将UDP支持的示例代码。所以,这与浏览器中的UDP无关。你的第二个参考是模拟一个类似于UDP的接口,但是通过webSocket或socket.io传输(它们都是TCP连接)来运行它。这是一个在浏览器中工作的模拟UDP接口,但实际的传输是TCP,而不是UDP。所以,它们都不在浏览器中运行实际的UDP协议。 – jfriend00

+1

第二个示例与基于服务器的代理一起使用,该代理将通过socket.io运行的此模拟UDP转换为实际的UDP可用于与来自浏览器的UDP服务进行通信,但不应该认为这是假设在浏览器中使用UDP的原因通常是使用UDP进行响应式低滞后游戏 - 事实并非如此。它很聪明,可能有一些有趣的用途,但是这个问题并不是什么问题,如何通过UDP运行socket.io。仅供参考,第二个选项中的接口名称是'SimUDP',模拟的UDP。 – jfriend00

+0

所以,总结一下。您的答案中没有显示通过UDP运行的socket.io的实现,因此您的部分答案完全不受支持。而且,你的断言Alexandre Lacheze的软件包将UDP带入浏览器也是错误的。它带来了一个模拟的类似于UDP的接口,实际上是通过TCP在浏览器上运行的。 – jfriend00