我建议你使用本地有线网络上的WebSockets开发游戏,然后在WebRTC数据通道API可用时进行移植。正如@oberstet所指出的那样,WebSocket的平均延迟基本相当于原始TCP或UDP,特别是在本地网络上,因此对于开发阶段来说应该没问题。一旦WebRTC数据通道API广泛可用,它的设计就非常类似于WebSocket(一旦建立连接),因此集成起来应该相当简单。
你的问题意味着UDP可能是低延迟游戏所需要的,这是正确的。如果你正在编写游戏,你可能已经意识到了这一点,但对于那些不知道的人,这里有一个有关TCP和UDP的快速入门:
TCP是一种有序、可靠的传输机制,UDP是最好的尝试。TCP将传送所有发送的数据,并按发送顺序传送。UDP数据包按照它们到达的顺序发送,可能是无序的,并且可能存在间隙(在拥塞的网络中,UDP数据包在TCP数据包之前被丢弃)。TCP听起来像一个很大的改进,对于大多数类型的网络流量来说确实如此,但这些功能也有代价:延迟或丢失的数据包也会导致所有后面的数据包延迟(以保证有序传递)。
实时游戏通常无法容忍TCP套接字可能导致的延迟,因此它们使用UDP进行大部分游戏流量,并具有处理丢失和无序数据的机制(例如向有效负载数据中添加序列号)。如果你错过了敌方玩家的一个位置更新并在几毫秒后收到了另一个位置更新(而且可能甚至没有注意到),那就没什么大不了的。但是,如果你500毫秒没收到位置更新,然后突然一次性收到了所有更新,那将导致可怕的游戏体验。
尽管如此,在本地有线网络上,数据包几乎从不会延迟或丢失,因此TCP作为初始开发目标非常合适。一旦WebRTC数据通道API可用,你可以考虑转移到它上面。当前的提案基于重试或计时器具有可配置的可靠性。
以下是一些参考资料:
简而言之,如果你想在多人游戏中使用TCP协议,你需要使用我们所称的自适应流媒体技术。换句话说,你需要确保针对每个客户端当前可用的带宽和延迟来控制实时数据的发送量,以在客户端之间同步游戏世界。
动态限速、合并处理、增量传输和其他机制都是自适应流媒体技术,它们不能像UDP一样神奇地使TCP变得高效,但足以使其对于多种类型的游戏可用。
我在一篇文章中尝试解释了这些技术:在Web上优化多人3D游戏同步 (http://blog.lightstreamer.com/2013/10/optimizing-multiplayer-3d-game.html)。
上个月我还在旧金山的HTML5开发者大会上发表了关于这个主题的演讲。该视频刚刚在YouTube上发布:http://www.youtube.com/watch?v=cSEx3mhsoHg
我想知道HTML6或其他版本是否支持UDP?
WebSockets不支持。 WebSockets的一个好处是它利用现有的HTTP连接。 这意味着对于代理和防火墙,WebSockets看起来像HTTP,因此它们不会被阻止。
由于安全问题,任意UDP连接很可能永远不会成为任何网络规范的一部分。 最接近您所需的内容将很可能作为WebRTC及其相关JSEP协议的一部分提供。
是否有可靠的基准测试...比较WS协议与低级别的直接套接字协议?
据我所知,没有这样的情况。我要冒险预测WebSockets会更慢 ;)