한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › 只有部分人遇到的问题

网络差的玩家在别人画面上快进移动 Laggy player seen by others (bursty inputs)

原因 ID pt-slow-burst · 主责 研发团队·服务器开发 · 配合 外部·外部

在含图示和实验的完整版中打开此卡片 →

线路差的人,输入会忽多忽少地扎堆到达服务器。服务器每个 tick 收到多少就应用多少时,在别人眼里,这个角色会顿一下,然后一下子走出好几步。

起因 网络差的人的移动指令,有的 tick 到 0 条,有的 tick 一次到 2~3 条 → 结果 服务器在收到的那个 tick 一次性全部应用,该角色的位置呈台阶式变化 → 画面表现 在别人画面上只有这个角色顿一下,然后一下子快进移动。其他都正常

症状
快进, 瞬移
因素
抖动, 丢包
谁会遇到
只有某个角色看起来异常, 特定地区/运营商
何时出现
一直, 移动中/切换地图时
负责方
主责 研发团队·服务器开发 · 配合 外部·外部
研发团队要做的事
用每个玩家的输入缓冲把指令均匀分摊应用,按输入序列号以原本的间隔应用;只加长别人画面上的插值缓冲是不够的(因为服务器上的位置记录本身就是台阶状)。
外部要做的事
引导网络差的玩家改用有线连接,检查 Wi-Fi 和路由器。
数值参考
抖动 80 ms 时,在 20 tick(50 ms)服务器上,每个 tick 的指令数会在 0~3 条之间波动。
监控图上
仅部分偏高 · 各玩家每 tick 应用的指令数,各玩家的抖动
查看位置
在服务器侧抓包,只过滤被反馈玩家发出的包,按 tick 间隔(例如 50 ms)统计每次到达几个,与其他玩家对比。有服务器日志时,按玩家看每个 tick 应用的移动指令数和输入序列号
确认依据
只有被反馈玩家的包在每个 tick 0 个与 2~3 个之间来回、扎堆到达,该玩家的抖动、丢包高,其他玩家的包到达均匀。该玩家换成有线后情况减轻
排除依据
多个角色同时快进移动,是服务器 tick 延迟或观看者一侧的线路问题。到达和应用都均匀,却只有这个角色看起来在跳,是观看者一侧的插值、显示问题
确认手段
运维工具即可确认(无需游戏代码)
深入了解
在服务器权威结构中,这是正常行为。一个网络差的人的卡顿,在别人眼里只表现为“这个人动作怪异”,不会影响其他人的操作或怪物的移动。不过与这个人直接交互的事情(交易、队伍机制、PvP 判定)会一起变慢。

出处

  1. Peeking into VALORANT's Netcode Riot Games
    服务器把到达的输入按 tick 顺序放进每个玩家的移动队列,队列空了就用预测填补。校正只有该玩家自己看得到,其他人看到的是流畅的
  2. State Synchronization Gaffer On Games
    每秒发 60 次的包,也会像一帧到 2 个、下一帧到 0 个这样扎堆到达
  3. Source SDK 2013: player.cpp Valve
    把扎堆到达的指令分摊到各个服务器 tick 处理(meter out)

相关原因

同一层:只有部分人遇到的问题

其他层中同样导致“快进”的原因

查看含图示和实验的原卡片