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

游戏卡顿白皮书 › 同步设计

帧同步中等待最慢的玩家 Lockstep waits for the slowest peer

原因 ID sy-lockstep · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发

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

所有人一起计算同一个逻辑帧的结构下,只要有一个人的输入晚到,所有人都得等。

起因 每个逻辑帧都要集齐所有玩家的输入才能计算 → 结果 某个人的输入因抖动、丢包而晚到 → 画面表现 所有人同时顿一下,严重时弹出“正在等待玩家”窗口

症状
卡住, 一卡一卡, 操作延迟
因素
抖动, 丢包, 停顿
谁会遇到
特定地点/分线
何时出现
偶尔随机
负责方
主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
研发团队要做的事
服务器:按 ping 自动调整输入延迟,只把落后的人暂时踢出同步,其余人不等他继续游戏。客户端:使用设定的输入延迟;没有中转服务器的 P2P,输入延迟调整和落后玩家的处理也由主机客户端负责。
数值参考
输入延迟设得比“输入到达对方的时间 + 抖动”短,卡住就会更频繁。到达时间在双方直连时约为 ping 的一半,经过中转服务器时约为两人 ping 之和的一半。
监控图上
偶发随机尖峰 · 逻辑帧等待时间,各玩家输入到达延迟
查看位置
每个逻辑帧记录各玩家输入到达的时刻,以及逻辑帧停下来等待的时间,查看停住的逻辑帧在等谁的输入。有中转服务器时,也可以在服务器侧抓包,按各玩家输入包的到达间隔来看
确认依据
每个停住的逻辑帧,都是同一个人的输入晚于输入延迟到达,且那一刻这个人的抖动、丢包冲高
排除依据
输入都按时到了却仍停住,是最慢那台 PC 的计算时间或服务器处理的问题。没有停顿、只是两边画面的结果不同,属于计算结果不一致(desync),看“指令同步的路径计算不一致”
确认手段
需要游戏服务器/客户端的日志和指标

出处

  1. Deterministic Lockstep Gaffer On Games
    第 n 帧的输入全部到齐才能计算,有人晚到就要等。用来吸收抖动的播放延迟缓冲太小时会顿一下
  2. 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond Game Developer
    把命令预约在两个逻辑帧后执行,并按最慢的电脑和 ping 调整逻辑帧长度(Speed Control)
  3. A Survey and Taxonomy of Latency Compensation Techniques for Network Computer Games (ACM Computing Surveys, 2022) ACM
    把输入延迟(incoming delay)设为“A→服务器 + 服务器→B”的延迟,让所有人在同一时刻应用

相关原因

同一层:同步设计

其他层中同样导致“卡住”的原因

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