0

假设我有一个具有固定时间步长的实时网络游戏。假设我设法在所有客户端和服务器之间同步当前步骤。如果输入数据包提前到达任何主机,他可以简单地存储它并等待正确的步骤来执行它。但是,如果数据包稍后到达会发生什么?例子:

一个带有第 5 步时间戳的数据包到达,它告诉我们玩家 A 杀死了玩家 B,因此 A 成为赢家。然而 2 步后,一个带有第 4 步时间戳的迟到的数据包到达,它告诉我们玩家 B 杀死了玩家 A。如果数据包没有迟到,那么玩家 A 将输掉比赛。我能想到的唯一解决方案是记录历史并及时来回进行更正,但这在某些情况下可能看起来非常尴尬。

解决这个问题的典型方法是什么?我应该如何处理迟到的数据包?在服务器端这很容易——我可以忽略它们的原始时间戳并具有权威性(实际上我必须这样做以防止作弊),但在客户端会导致不同客户端之间的不同步。

4

1 回答 1

0

您应该使用流套接字来获取关键信息,例如谁杀了谁。流套接字使用 TCP 进行数据传输,数据包总是以相同的顺序到达,例如,如果您发送“A、B、C”,它们将以相同的顺序到达,即“A、B”C'

对于像移动这样不太重要的信息,您可以使用数据报套接字,它们使用 UDP 进行数据传输。在这里,您可以简单地忽略旧消息,因为您已经处理了新动作。

于 2013-08-05T16:41:29.313 回答