Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Network programming 如何实现类似agar.io的游戏';s网络模型_Network Programming_Multiplayer - Fatal编程技术网

Network programming 如何实现类似agar.io的游戏';s网络模型

Network programming 如何实现类似agar.io的游戏';s网络模型,network-programming,multiplayer,Network Programming,Multiplayer,我想知道,对于像agar.io这样的游戏,实现网络模型的最佳方式是什么?我假设它是一个权威服务器,但我想知道: 是每个玩家“拥有”自己的位置并将其发送到服务器,还是每个玩家只发送自己的输入,并且服务器上的所有内容都是完全权威的 它如何决定向哪个玩家发送什么数据?我假设对于每个玩家,我都必须迭代服务器中的所有玩家,并检查他们是否当前(或即将)可见,如果是,则开始发送他们的数据 实际碰撞发生在哪里?如何处理滞后 我很清楚在FPS游戏中处理这个问题的方法(玩家预测、回放、延迟补偿等)——但通常是在更小

我想知道,对于像agar.io这样的游戏,实现网络模型的最佳方式是什么?我假设它是一个权威服务器,但我想知道:

  • 是每个玩家“拥有”自己的位置并将其发送到服务器,还是每个玩家只发送自己的输入,并且服务器上的所有内容都是完全权威的
  • 它如何决定向哪个玩家发送什么数据?我假设对于每个玩家,我都必须迭代服务器中的所有玩家,并检查他们是否当前(或即将)可见,如果是,则开始发送他们的数据
  • 实际碰撞发生在哪里?如何处理滞后

  • 我很清楚在FPS游戏中处理这个问题的方法(玩家预测、回放、延迟补偿等)——但通常是在更小的规模上完成的,我认为一个更简单的解决方案对于像这样有数千名并发玩家的休闲游戏来说已经足够了。

    agario中的模型有两个方面:

  • 你可以看到其他玩家吃同样的点,这表明玩家正在接收所有玩家的位置(大概每秒5次),然后出现和消失的点由客户端处理。如果不在客户端处理这些点,将花费巨大的带宽。这也意味着您会收到一条消息,其中包含启动时所有点的位置,这是有意义的,因为并非所有点都在开头
  • 玩家向服务器发送的输入与位置相反,因为否则将非常容易被黑客攻击。然后在服务器上处理冲突逻辑
  • 如果在服务器获得其他玩家的输入后,将其从服务器广播(而不是位置)到客户端,则微小的差异会像蝴蝶效应一样累积,并导致混乱

    我很确定输入每秒只发送5次,因为存在一个导致每秒发送5次以上的数据包聚集在一起的错误