【问题标题】:How to implement an agar.io like game's networking model如何实现类似 agar.io 的游戏网络模型
【发布时间】:2016-05-09 14:01:45
【问题描述】:
我想知道为 agar.io 之类的游戏实现网络模型的最佳方法是什么 - 我假设它是一个权威服务器,但我想知道:
- 是每个玩家都“拥有”他的位置并将其发送到服务器,还是每个玩家仅发送他的输入并且服务器上的所有内容都是完全权威的?
- 它如何决定将哪些数据发送给哪个玩家?我假设对于每个玩家,我必须对服务器中的所有玩家进行迭代,并检查他们当前(或即将)是否可见,如果是,则开始向他们发送数据
- 实际碰撞发生在哪里,如何处理延迟?
我很清楚在 FPS 游戏中处理此问题的方法(玩家预测、倒带回放、延迟补偿等) - 但通常以更小规模完成,我认为更简单的解决方案就足够了对于像这样拥有数千名并发玩家的休闲游戏。
【问题讨论】:
标签:
network-programming
multiplayer
【解决方案1】:
agario 中的模型由 2 个方面显示:
- 你可以看到其他玩家吃相同的点,这表明玩家正在接收所有玩家的位置(可能每秒大约 5 次),然后出现和消失的点由客户端处理。如果这些点不被客户端处理,那将花费巨大的带宽。这也意味着您会在启动时收到一条包含所有点位置的消息,这是有道理的,因为并非所有点都在开头
- 从玩家到服务器的输入被发送而不是位置,因为否则它将非常容易被破解。然后在服务器上处理冲突的逻辑
如果其他玩家的输入(而不是位置)在服务器得到它们之后从服务器广播到客户端,那么微小的差异就会像蝴蝶效应一样累积并导致混乱
我很确定输入每秒只发送 5 次,因为有一个 problem with websockets 会导致每秒发送超过 5 次的数据包聚集在一起