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

Posted

技术标签:

【中文标题】TCP 和 Node.js 的实时多人游戏原理【英文标题】:Realtime multiplayer game principles for TCP and Node.js 【发布时间】:2012-07-11 06:53:14 【问题描述】:

我一直在阅读 Valve article on multi-player networking,它改编自 Yahn Bernier 2001 年名为 Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization 的论文。我正在使用通过 socket.io 连接到客户端的 node.js 服务器制作实时多人游戏,我对下面详述的原则有一些疑问:

Entity Interpolation

[插值] 防止抖动运动,这会 通常通过缓冲服务器更新然后播放它们来导致 之间的间隙平滑地插入。它还可以保护 防止丢包引起的故障。

Client-Side Prediction

预测是客户预测事件影响的概念 本地玩家的操作无需等待服务器确认。 实体的预测状态是针对服务器命令进行测试的,因为它们 在检测到匹配或不匹配之前到达。

Lag Compensation

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

这些原则是否适用于 TCP,就像它们适用于 UDP 一样,在实现上会有什么不同吗?我可以看到实体插值不需要防止数据包丢失,仅此而已。

我什至可以使用 UDP 和 Node.js 在服务器和网络浏览器之间进行通信,反之亦然吗?

由于这篇论文已有十多年的历史,这些原理是否仍在使用或出现了其他技术?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】: 这些原则是否适用于 TCP,就像它们适用于 UDP 一样,在实现上会有什么不同吗?我可以看到实体插值不需要防止数据包丢失,仅此而已。

虽然您不必处理丢包问题,但您将不得不处理更长的传输时间。 TCP 比 UDP 慢,您必须在实时多人游戏中缓解这种情况。我认为这些原则仍然适用于基本层面。

我什至可以使用 UDP 和 Node.js 在服务器和网络浏览器之间进行通信,反之亦然吗?

一般来说,还没有。至少不是没有某种形式的浏览器扩展或插件——WebSockets 使用 TCP。也就是说,WebRTC(更具体地说,PeerConnection API)即将到来。实现数据通道后,理论上应该可以进行 UDP 通信。

由于这篇论文已有十多年的历史,这些原则是否仍在使用或出现了其他技术?

听到它们不再使用,我会感到非常惊讶 - 您引用的文章实际上是游戏程序员的必读文章。新技术没有出现也是如此,尽管我已经有几年没有密切关注这个领域的发展了。

【讨论】:

以上是关于TCP 和 Node.js 的实时多人游戏原理的主要内容,如果未能解决你的问题,请参考以下文章

WebRTC 是正确的吗? (实时多人游戏)

Android 实时多人游戏:onRoomCreated 变得不稳定 STATUS_NETWORK_ERROR_NO_DATA

Node.js学习笔记

Node.js 多人游戏多线程和多核

使用 Node.JS 构建的多人 JavaScript 游戏 - 分隔玩家

实现实时多人游戏存在哪些问题