Node.js的实时多人游戏设计原则


12

我一直在阅读关于多人网络的Valve 文章,文章改编自Yahn Bernier在2001年发表的名为“ 客户端/服务器游戏内协议设计和优化中的延迟补偿方法”的论文。我正在使用通过socket.io连接到客户端的node.js服务器制作实时多人游戏,我对以下详述的原理有一些疑问:

实体插值

[插值]通过缓冲服务器更新,然后平滑地插补它们之间的间隔来播放,从而防止通常会引起的抖动。它还可以防止数据包丢失引起的故障。

客户端预测

预测是指客户无需等待服务器确认本地参与者的行为即可对其行为进行预测的概念。当服务器命令到达时,将对实体的预测状态进行测试,直到检测到匹配或不匹配。

滞后补偿

延迟补偿是服务器的一种概念,它在处理[用户输入]时使用播放器的延迟来倒回时间,以便查看播放器在发送命令时看到了什么。与预测相结合,延迟补偿可以帮助将网络延迟降低到从攻击者的角度来看几乎可以消除的水平。

  • 这些原则是否适用于TCP,就像适用于UDP一样,在实现上是否会有任何差异?我可以看到实体插值不需要保护以防止丢包,仅此而已。

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

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

任何帮助将非常感激。


1
与普遍的看法相反,您实际上不需要UDP进行多人游戏。向最好的人学习;魔兽使用TCP,我相信许多其他AAA多人游戏也可以使用。人们只是听从别人的建议,然后在接下来的5个月中自己实施一个糟糕而缓慢的TCP版本!
jcora 2012年

1
(当然,除非您确定您有知识和资源可以在UDP之上开发可利用其优势的体面协议。)
jcora 2012年

1
没有AAA FPS游戏使用TCP。对于需要实时更新的游戏来说,这确实太慢了。但是由于他没有编写动作游戏,所以他应该能够摆脱TCP。
布伦丹·莱斯尼亚克

@Yannbane不知道魔兽世界使用TCP。从我能找到的东西来看,似乎很多MMO都这样做。使我对使用HTML5编写多人游戏更加自信。谢谢!
dreta

Answers:


6
  • 不管传输协议如何,减少滞后效应的原理都是相同的。数据包丢失是另一个主题-对于许多数据包来说,丢失数据并不是很关键,因为下一次更新可能已经在进行中-这是UPD的优势,但是当您需要确保已发送特定数据包时,则需要自定义确认代码以使用UDP进行确认
  • Node.js支持UDP,但Web浏览器不支持(无插件)。两者之间最好的实时通信方法是Web套接字,它基本上是TCP。但是,为了进行通信,您可能需要使用Socket.IO,它为不支持Web套接字的浏览器提供后备功能。
  • 原理保持不变。

1
我想这已经过时了-WebRTC应该是使用类似UDP的通信的方式,不是吗?
Nikolay Tsenkov,2014年

4

您应该查看Sven Bergstrom在buildnewgames.com网站上发布的有关HTML5中的实时多人游戏的文章,他在谈论同样的事情,并且他正在使用Node.JS。我自己也有类似的事情。在尝试解决其余问题之前,我现在正在研究有关客户端预测和内插之类的更多信息。

我相信使用Socket.IO和Node绝对可以做到这一点,但是该技术仍然是新技术,因此在实现指南方面几乎没有文档,也几乎没有。我建议做我正在做的事情,并以抽象的高级术语详细研究该主题,然后尝试自己实现。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.