假设我有一个固定时间步的实时网络游戏。我们还说我设法在所有客户端和服务器之间同步当前步骤。如果输入数据包提前到达任何主机,他只需存储它并等待正确的步骤执行它。但是,如果数据包稍后到达会发生什么?例如:
为步骤5加上时间戳的数据包到达,告诉我们玩家A杀死玩家B,因此A成为赢家。然而,2个步骤之后,为第4步加上时间戳的延迟数据包到达,这告诉我们玩家B杀死了玩家A.如果数据包没有迟到,则玩家A将失去游戏。我能想到的唯一解决方案是记录历史并及时反复进行修正,但在某些情况下这可能看起来非常尴尬。
这是什么典型的方式?我应该怎么处理迟到的数据包?在服务器端它很容易 - 我可以忽略它们的原始时间戳并具有权威性(事实上我必须这样做以防止作弊),但在客户端会导致不同客户端之间的解除。
答案 0 :(得分:0)
你应该使用Stream Sockets来获取关键信息,例如谁杀了谁。流套接字使用TCP进行数据传输,数据包总是以相同的顺序到达,例如,如果发送'A,B,C',它们将以相同的顺序到达,即'A,B'C'
对于不太重要的移动等信息,您可以使用数据报套接字,它们使用UDP进行数据传输。在这里,您可以忽略旧消息,因为您已经处理了新动作。