告诉滞后和正常延迟之间的区别?

时间:2014-07-03 00:23:11

标签: pseudocode lag latency

伪代码中,您如何从客户端区分普通客户端ping (例如在视频游戏中)谁滞后

是否有算法可以找到一个阈值来区分客户端和服务器之间的正常延迟延迟(例如,在FPS / PVP视频游戏中)?

在什么时候延迟被视为"滞后"

重复一遍,我正在寻找伪代码的答案。不是特定的语言。

1 个答案:

答案 0 :(得分:2)

在多玩家FPS中,如果根据服务器(服务器游戏状态)的现实与所涉及的各种客户端计算机上的现实(客户端游戏状态)明显不同,则游戏通常被称为“滞后”。

您需要检查管道

  1. 用户在客户端提供输入(移动,使用电源等)
  2. 输入从客户端传输到服务器
  3. 服务器处理来自相关连接客户端(多人)的输入
  4. 服务器将结果返回给每个连接的客户端(新角色位置,对敌人的伤害,对自身的伤害,新的冷却时间等)。
  5. 客户端更新本地游戏状态以匹配服务器游戏状态。
  6. 由于客户端和服务器之间的ping时间远远超过游戏渲染帧速率,因此游戏客户端通常能够继续等待来自服务器的回复。另一种方法是仅在服务器回复所有操作后渲染每个帧(waaaay太慢)。

    如果客户和服务器在很大程度上仍然对游戏状态(角色位置,受到的伤害,电力冷却等)保持一致,则用户将体验到游戏“平稳”。

    如果服务器回复导致游戏客户端显着改变其自己预测的内部状态,游戏将感觉“滞后”。在某些游戏中,这表现为橡皮筋(游戏客户端将用户置于某个位置,但是一旦从服务器收到回复,就会显着更新位置...导致角色来回移动,就像在橡胶上一样带)。

    我不知道处理整个管道的任何特定阈值(从用户输入到服务器的权威游戏状态更新)构成“平滑”和“滞后”之间的转换。如果服务器和客户端游戏状态永远不会超过100毫秒 - 200毫秒,我会猜测,感觉会非常顺畅。如果游戏状态不同步1秒以上(对于PvP或动作强烈的PvE类型游戏),玩家会将不同步视为“滞后”。

    伪代码将记录输入发起时的时间戳和基于该输入返回权威服务器游戏状态的时间戳。取差异,计算移动平均线。该移动平均值表示服务器状态和客户端状态之间的时间差。如果该平均值超过阈值(可能通过测试特定游戏来定义),则可以认为该体验是滞后的。