假设我有一个具有固定时间步长的实时网络游戏。假设我设法在所有客户端和服务器之间同步当前步骤。如果输入数据包提前到达任何主机,他可以简单地存储它并等待正确的步骤来执行它。但是,如果数据包稍后到达会发生什么?例子:
一个带有第 5 步时间戳的数据包到达,它告诉我们玩家 A 杀死了玩家 B,因此 A 成为赢家。然而 2 步后,一个带有第 4 步时间戳的迟到的数据包到达,它告诉我们玩家 B 杀死了玩家 A。如果数据包没有迟到,那么玩家 A 将输掉比赛。我能想到的唯一解决方案是记录历史并及时来回进行更正,但这在某些情况下可能看起来非常尴尬。
解决这个问题的典型方法是什么?我应该如何处理迟到的数据包?在服务器端这很容易——我可以忽略它们的原始时间戳并具有权威性(实际上我必须这样做以防止作弊),但在客户端会导致不同客户端之间的不同步。