MMO技术,算法和资源可用于保持较低的带宽?


9

关于当前MMO如何处理从压缩到客户端处理的动作和运动数据,是否有任何资源和文档?运动预测算法有任何资源吗?

我对那些具有移动性并专注于保持低延迟的应用特别感兴趣。不同类型的MMO(网络方式)的包速率和大小是多少?

如果玩家无法到达或在以后的情况下看到它们,是否有办法缩放数据包速率或完全禁用某些数据包?

Answers:


9

好吧,有一本书 -现在有些陈旧了,我从未真正读过它,但它是由著名的出版商提供的。我还发现了这个更新的版本,但是我从未听说过。两者都声称涵盖了MMO(或至少是在线)游戏开发问题;也就是说,无论您的并发玩家人数多大,客户端预测都大致相同,并且Google拥有大量有关此信息

重要的是要认识到,从实践的角度来看,对于独立/爱好开发人员来说,很难将一款游戏变得足够流行,甚至吸引足够的玩家,以达到足够高的理论峰值并发度,被认为是“庞大的”游戏。但是这些技术仍然可以进行研究。

您可以做的事情有两种主要分类:

  • 积极地仅将最小量的数据发送给需要它的最小数量的客户端。
  • 设计一款不会给玩家提供过多奖励的游戏,可以帮助您将“需要的客户群”的数量保持在很小的水平。

第二个问题确实是一个游戏设计和社交操纵问题-这特别棘手,因为多人游戏自然是社交性的,这是它们吸引力的一部分,因此您不想过多地劝阻一群玩家。另一方面,世界上每个人都在衍生出一个在游戏中掉落最好战利品的家伙的游戏,将很难扩展。

对于第一种选择,您可以考虑进行分层消息传递-有关其他参与者的一些事情始终很重要,例如职位。但是其他因素(例如健康状况)对于当前玩家尚未看到的对象可能并不那么重要,因此您要根据他附近所有其他实体的相对距离来确定发送给该玩家的内容-这实际上是在节流如您在问题的最后一部分中提到的,将您发送的数据进行过滤。

大型多人游戏体系结构还将缓冲不需要对其立即采取措施的报告。发送到服务器的字符保存消息可以按增量进行,仅在关键点进行完整更新,并且这些更新可以在节流服务器上进行缓冲,以便将它们发送到实际上将字符数据保持稳定的服务器,定期的方式-随着播放器基础的扩展,您必须担心优化磁盘IO和网络流量。您不想使角色数据库崩溃。

就像非MMO游戏一样,每个游戏的数据包速率和大小差异很大。这确实是非常特定于需求的事情,并且没有通用的标准。


1
第一本书也有续集(《大型多人游戏开发2》)。在我看来,这不是一个非常有用的系列丛书(绝对不是像大多数游戏开发者书本那样可以在一小时内完成MMO制作的书),但是它确实讨论了一些理论问题。问这个问题。对于已经拥有部分开发MMO的人来说,这可能会更有用。
Ricket

5

除了上述答案外,还请阅读TCP_NODELAY以及窗口缩放的操作方式。了解TCP的详细信息(是的,除非希望处理无序更新的差异更新听起来很有趣,否则您要使用TCP而不是UDP),并且重传对于延迟控制至关重要。


4
我会重复一遍,如果您使用差异更新(通常是游戏中结构的二进制差异),并且使用了乱序交付(无论可靠与否)的任何东西,您都会后悔。人们在游戏中不喜欢TCP的人通常对此并不了解(例如知道NODELAY的作用)。UDP对于诸如语音数据之类的东西有意义,在这里乱序数据包可以简单地丢弃,这在游戏中很少见。
coderanger 2011年

1
“游戏中很少见”?只要服务器在每一帧都为我提供权威的游戏状态,我不在乎过去发生了什么。为此,从UDP数据包中简单增加单调帧号非常适合。您真正需要可靠地传输多少数据?
克里斯(ChrisE)2011年

2
“只要服务器将每帧都赋予我权威的游戏状态,”可以肯定,如果您将其视为既定条件。请注意,我说的是“如果您正在使用差异更新”,这与在每个帧中选通完整状态相反。在世界上具有任何复杂程度的MMO中,频繁地发布完整的更新将很快变得不可能。
coderanger 2011年

1
即使发送已更改状态的完整状态,您最终也会遇到无序交付的问题,在这些情况下,将所有内容合并在一起将变得不可行。考虑更新“ x = 1,y = 2”,然后“ y = 1,z = 2”。如果那些倒退,则要删除“第一个”,以便y的值正确,但是随后您将丢失对x的更改。
coderanger 2011年

1
@Adam这就是为什么我说您应该阅读TCP规范并了解窗口缩放如何工作以及它如何与重传交互的原因;-)重写TCP基本上总是错误的,将其搞砸的可能性接近100%。如果您想要可靠的有序交付,则不应该使用UDP。
coderanger 2011年
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.