假设您有一个服务器权威的多人在线游戏(服务器对游戏中发生的事情拥有最终决定权,客户端只是渲染图形并接受用户输入并将其提供给服务器)。
如果一个区域中有 X
个玩家彼此相邻,则在彼此可见的情况下,服务器必须向每个玩家发送有关所有玩家状态的信息。
位置、当前动画、游戏统计数据等。
这意味着它必须发送X^2
数据。然而,我见过超过一千名玩家聚集在一个地方的游戏,但它仍然在运作。
如果服务器试图发送如此荒谬的数据量,这是不可能的。
那么它是怎么做到的呢?
更新其他玩家的状态不需要大量数据。例如,每个客户端都可以重新计算所有其他玩家的位置、动画状态、统计数据等,只给出他们的游戏手柄输入。假设有 16 个按钮(位),每秒采样 10 次。这导致每个播放器每秒 20 字节的数据,需要 20 * 1000 * 1000 字节/秒 = 20 MB/s 的总带宽,供 1,000 个玩家使用。此数据通常可以通过仅传输(操作、时间戳)对来进一步压缩。
也就是说,在MMO游戏的许多方面,根本没有办法避免二次空间或时间的复杂性。这就是为什么即使是今天的MMO通常每张地图也只支持32-64名玩家,很少有人支持256名或更多。