【问题标题】:Late-arriving packets in a real-time networked game environment实时网络游戏环境中迟到的数据包
【发布时间】:2013-08-01 09:44:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: networking synchronization game-engine multiplayer lag


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多