游戏中的网络问题

str*_*ika 6 networking latency anti-cheat

我正在寻找特定于游戏的网络设计和技巧.我知道一些问题,我对其中一些问题有一些部分解决方案,但可能存在我看不到的问题.我认为没有明确的答案,但我会接受我真正喜欢的答案.我可以想到4类问题.

信号不好

客户端发送的消息需要一些时间才能到达服务器.服务器不能只处理它们FCFS,因为这对于具有较高延迟的玩家是不公平的.对此的部分解决方案是消息的时间戳,但您需要两件事:

  • 能够信任客户的时钟.(我认为这是不可能的.)
  • 您可以测量的持续延迟.您可以对可变延迟做些什么?

很多游戏都使用UDP,这意味着消息可能丢失.在这种情况下,他们会尝试根据已有的信息来估算游戏状态.在连接再次工作后,您如何知道估计的状态是否正确?

在MMO游戏中,服务器处理大量客户端.分配负载的最佳方法是什么?根据游戏中的位置?将一组客户端绑定到服务器?你能避免通过服务器发送一切吗?

球员离开

发生这种情况时,我看到了2种不同的行为.在大多数FPS游戏中,如果主持游戏的玩家(我猜他是服务器)离开了其他玩家无法玩.在大多数RTS游戏中,如果任何玩家离开,其他玩家可以继续玩而不用他.没有专用服务器怎么可能?每个人都知道完整的状态吗?他们是以某种方式转移服务器的角色吗?

获取信息

下一个问题可以通过专用服务器解决,但我很好奇是否可以在没有服务器的情况下完成.在很多游戏中,玩家不应该知道游戏的完整状态.RPS中的战争迷雾和FPS中的墙壁就是很好的例子.但是,他们需要知道某个操作是否有效.(例如,你可以从那里开枪给我,还是你在地图的另一边.)在这种情况下,客户需要验证对未知状态的更改.这听起来像是可以通过巧妙使用加密原语来解决的.有任何想法吗?

作弊

在受信任的客户端环境中,上述一些问题很容易,但不能假设.是否有解决方案可以在80%的普通用户中使用 - 20%的骗子环境?你真的可以制作一个有效的反作弊软件(并且不需要内核模块等荒谬的东西)吗?

我确实阅读了这些问题和一些答案/sf/ask/63111471/但其他答案链接到不可用/受限制的内容.这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案.

o0'*_*0'. 2

认为密码学可以解决此类问题是一个非常常见且非常严重的错误:客户端本身当然必须能够解密它,所以这是完全没有意义的。你并没有增加安全性,你只是增加了模糊性(并且被破解)。

作弊过于特定于游戏。有些游戏无法完全消除这种情况(FPS 中的瞄准机器人),而有些游戏如果你没有搞砸,则根本不可能消除这种情况(基于服务器的回合制游戏)。

一般来说,像这样的网络问题与预测密切相关,这充其量是一个非常复杂的主题,并且在著名的 Valve 文章中对此进行了很好的解释。