我一直在阅读关于多人网络的 Valve 文章,该文章改编自 Yahn Bernier 2001 年的论文,名为Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization。我正在使用通过 socket.io 连接到客户端的 node.js 服务器制作实时多人游戏,我对下面详述的原则有一些疑问:
[插值] 通过缓冲服务器更新然后在播放它们之间平滑插值的间隙来防止通常会导致的抖动运动。它还可以防止因丢包引起的故障。
预测是客户端预测本地玩家行为的效果而不等待服务器确认它们的概念。实体的预测状态在服务器命令到达时针对它们进行测试,直到检测到匹配或不匹配。
延迟补偿是服务器在处理 [用户输入] 时使用玩家的延迟来回退时间的概念,以便查看玩家在发送命令时看到的内容。结合预测,延迟补偿可以帮助对抗网络延迟,从攻击者的角度来看几乎可以消除它。
这些原则是否适用于 TCP,就像它们适用于 UDP 一样,在实现上会有什么不同吗?我可以看到实体插值不需要防止数据包丢失,仅此而已。
我什至可以使用 UDP 和 Node.js 在服务器和 Web 浏览器之间进行通信,反之亦然吗?
由于这篇论文已有十多年的历史,这些原则是否仍在使用,还是出现了其他技术?
任何帮助将非常感激。