Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance WebSocket、UDP和基准测试_Performance_Html_Udp_Websocket - Fatal编程技术网

Performance WebSocket、UDP和基准测试

Performance WebSocket、UDP和基准测试,performance,html,udp,websocket,Performance,Html,Udp,Websocket,HTML5 WebSocket目前使用一种TCP通信形式。然而,对于实时游戏来说,TCP并不能解决这一问题(这也是使用其他平台(如native)的重要原因)。由于我可能需要UDP来继续一个项目,我想知道HTML6或其他的规范是否支持UDP 此外,是否有任何可靠的WebSocket基准可以将WS协议与低级别的直接套接字协议进行比较 我想知道HTML6或任何东西的规范是否支持UDP WebSocket不会。WebSockets的一个好处是它可以。这意味着,对于代理和防火墙,WebSocket看起来像

HTML5 WebSocket目前使用一种TCP通信形式。然而,对于实时游戏来说,TCP并不能解决这一问题(这也是使用其他平台(如native)的重要原因)。由于我可能需要UDP来继续一个项目,我想知道HTML6或其他的规范是否支持UDP

此外,是否有任何可靠的WebSocket基准可以将WS协议与低级别的直接套接字协议进行比较

我想知道HTML6或任何东西的规范是否支持UDP

WebSocket不会。WebSockets的一个好处是它可以。这意味着,对于代理和防火墙,WebSocket看起来像HTTP,因此不会被阻止


很可能任意UDP连接永远不会成为任何web规范的一部分,因为。与你所追求的最接近的东西很可能是你所追求的东西的一部分,并且它是相关联的

是否有可靠的基准。。。那个将WS协议与低级别的直接套接字协议进行比较


我不知道。我将冒险预测WebSockets会更慢;)

在局域网上,您可以通过200微秒的WebSocket(从浏览器JS到WebSocket服务器再返回)获得消息的往返时间,这与原始ICMP ping类似。在MAN上,大约是10毫秒,WAN(通过住宅ADSL到同一国家的服务器)大约是30毫秒,等等,通过3.5G可以达到120-200毫秒。关键是:基于网络,WebSocket实际上不会给您得到的延迟增加任何延迟

WebSocket的线级开销(与原始TCP相比)在每条消息的2个八位字节(长度<126个八位字节的未屏蔽有效负载)和14个八位字节(长度>64k的屏蔽有效负载)之间(前面的数字假设消息未分段为多个WebSocket帧)。非常低

有关WebSocket线级开销的更详细分析,请参见此——这包括对WebSocket以外各层的分析

更重要的是:通过支持流式处理的WebSocket实现,您可以(在初始WebSocket握手之后),在每个方向上启动单个WebSocket消息和帧,然后发送多达2^63个八位字节,而不会产生任何开销。从本质上讲,这使得WebSocket成为原始TCP的前奏。警告:中介机构可能会根据自己的决定分割流量。但是,如果您运行WSS(即安全的WS=TLS),则没有中介可以进行干扰,而您就是:原始TCP,具有与HTTP兼容的前奏(WS-handshake)

WebRTC使用RTP(=基于UDP)进行媒体传输,但还需要一个信令通道(可以是WebSocket,即)。RTP针对容错实时媒体传输进行了优化。“实时游戏”通常意味着传输的不是媒体,而是球员位置之类的东西。WebSocket将为此工作


注意:WebRTC传输可以通过RTP进行,也可以通过SRTP进行安全传输。请参阅“RTP配置文件”。

我建议您在本地有线网络上使用WebSockets开发游戏,然后在WebRTC数据通道API可用后再转到它。正如@oberstet正确指出的那样,WebSocket平均延迟基本上等同于原始TCP或UDP,特别是在本地网络上,所以对于您的开发阶段来说应该是不错的。WebRTC数据通道API的设计非常类似于WebSockets(一旦建立了连接),因此一旦广泛使用,集成起来应该相当简单

你的问题意味着UDP可能是你想要的低延迟游戏,这是事实。您可能已经意识到了这一点,因为您正在编写一个游戏,但对于那些没有意识到这一点的人,这里有一个关于TCP与UDP的快速入门,用于实时游戏:

TCP是一种有序、可靠的传输机制,UDP是最好的传输机制。TCP将按照发送顺序发送所有发送的数据。UDP数据包在到达时发送,可能出现故障,并且可能有间隙(在拥挤的网络上,UDP数据包在TCP数据包之前被丢弃)。TCP听起来是一个很大的改进,它适用于大多数类型的网络流量,但这些特性是有代价的:延迟或丢弃的数据包也会导致以下所有数据包延迟(以保证按顺序交付)

实时游戏通常不能容忍TCP套接字可能导致的延迟类型,因此它们对大多数游戏流量使用UDP,并具有处理丢失和无序数据的机制(例如,向有效负载数据添加序列号)。如果你错过了敌方玩家的一个位置更新,那也没什么大不了的,因为几毫秒后你会收到另一个位置更新(甚至可能不会注意到)。但是,如果你在500毫秒内没有得到位置更新,然后突然将它们全部输出一次,那将导致糟糕的游戏

综上所述,在本地有线网络上,数据包几乎从不延迟或丢弃,因此TCP作为初始开发目标是完美的。一旦WebRTC数据通道API可用,您可能会考虑移动到那个。当前方案具有基于重试或定时器的可配置可靠性

以下是一些参考资料:


长话短说,如果你想在多人游戏中使用TCP,你需要使用我们称之为自适应流技术的技术。换句话说,您需要确保在客户端之间发送用于同步游戏世界的实时数据量由每个客户端的当前可用带宽和延迟控制

动态节流、合并、增量传递和其他机制都是自适应流技术,这些技术并不能神奇地使TCP像UDP那样高效,但可以使它足够用于多种类型的游戏

我试图在一篇文章中解释这些技术:通过Web优化多人3D游戏同步()

上个月我也就这个话题做了一次演讲