TCP和Node.js实时多人游戏原理

11
我一直在阅读Valve的多人游戏网络文章,该文章改编自Yahn Bernier于2001年发表的论文《客户端/服务器游戏协议设计和优化中的延迟补偿方法》。我正在使用连接到客户端的node.js服务器和socket.io制作实时多人游戏,并对下面详细说明的原则有几个问题: 实体插值 引用:

[插值]通过缓冲服务器更新并平滑地插入它们之间的差距来防止这种情况通常会导致的抖动运动。它还可以防止由数据包丢失引起的故障。

客户端预测 引用:

预测是指客户端预测本地玩家行为的效果而不必等待服务器确认。当服务器命令到达时,将测试实体的预测状态,直到检测到匹配或不匹配为止。

延迟补偿 引用:

延迟补偿是指服务器使用玩家的延迟在处理[用户输入]时倒回时间,以查看命令发送时玩家所看到的内容。结合预测,延迟补偿可以帮助对抗网络延迟,从攻击者的角度几乎将其消除。

  • 这些原则适用于TCP和UDP吗?是否有实现上的区别? 我认为实体插值不需要保护数据包丢失,但仅此而已。

  • 我能否使用UDP和Node.js在服务器和Web浏览器之间进行相互通信?

  • 由于这篇论文已经超过十年了,这些原则是否仍在使用中,或者出现了其他技术?

非常感谢您的任何帮助。

1个回答

2
  • 这些原则是否适用于TCP和UDP,它们在实现上有什么不同?我可以看出实体插值不需要防止数据包丢失,但就是这样。

虽然你不必处理数据包丢失,但你仍然需要处理较长的传输时间。TCP比UDP慢,你需要在实时多人游戏中缓解这种情况。我认为这些原则在基本层面上仍然适用。

  • 我能使用UDP和Node.js在服务器和Web浏览器之间进行通信吗?反之亦然?

一般来说,目前还不能。至少没有一些形式的浏览器扩展或插件--WebSockets使用TCP。尽管如此,WebRTC(更具体地说,PeerConnection API)正在发展中。当数据通道被实现后,则理论上可以进行UDP通信。

  • 由于这篇论文已经过去十年了,这些原则仍在使用吗?是否出现了其他技术?

如果这些原则不再使用,我会感到非常惊讶--你引用的文章几乎是游戏程序员必读的材料。同样,也没有新技术出现,尽管我已经有好几年没有密切关注这个领域的发展了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接