我正在寻找特定于游戏的网络设计和技巧.我知道一些问题,我对其中一些问题有一些部分解决方案,但可能存在我看不到的问题.我认为没有明确的答案,但我会接受我真正喜欢的答案.我可以想到4类问题.
信号不好
客户端发送的消息需要一些时间才能到达服务器.服务器不能只处理它们FCFS,因为这对于具有较高延迟的玩家是不公平的.对此的部分解决方案是消息的时间戳,但您需要两件事:
能够信任客户的时钟.(我认为这是不可能的.)
您可以测量的持续延迟.您可以对可变延迟做些什么?
很多游戏都使用UDP,这意味着消息可能丢失.在这种情况下,他们会尝试根据已有的信息来估算游戏状态.在连接再次工作后,您如何知道估计的状态是否正确?
在MMO游戏中,服务器处理大量客户端.分配负载的最佳方法是什么?根据游戏中的位置?将一组客户端绑定到服务器?你能避免通过服务器发送一切吗?
球员离开
发生这种情况时,我看到了2种不同的行为.在大多数FPS游戏中,如果主持游戏的玩家(我猜他是服务器)离开了其他玩家无法玩.在大多数RTS游戏中,如果任何玩家离开,其他玩家可以继续玩而不用他.没有专用服务器怎么可能?每个人都知道完整的状态吗?他们是以某种方式转移服务器的角色吗?
获取信息
下一个问题可以通过专用服务器解决,但我很好奇是否可以在没有服务器的情况下完成.在很多游戏中,玩家不应该知道游戏的完整状态.RPS中的战争迷雾和FPS中的墙壁就是很好的例子.但是,他们需要知道某个操作是否有效.(例如,你可以从那里开枪给我,还是你在地图的另一边.)在这种情况下,客户需要验证对未知状态的更改.这听起来像是可以通过巧妙使用加密原语来解决的.有任何想法吗?
作弊
在受信任的客户端环境中,上述一些问题很容易,但不能假设.是否有解决方案可以在80%的普通用户中使用 - 20%的骗子环境?你真的可以制作一个有效的反作弊软件(并且不需要内核模块等荒谬的东西)吗?
我确实阅读了这些问题和一些答案/sf/ask/17360801/但其他答案链接到不可用/受限制的内容.这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案.