游戏卡顿白皮书 › 只有部分人遇到的问题
到达即处理的服务器造成的快进 Event-driven processing of bursty inputs
原因 ID pt-event-server · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
在包一到就立即处理并广播的服务器上,网络差的人扎堆到达的动作会被接连立即执行。
起因 网络差的人的技能、移动请求扎堆到达 → 结果 服务器一收到就按顺序执行,并立即通知所有人 → 画面表现 在别人眼里,这个人一瞬间放出好几个技能,或像快进一样移动
- 症状
- 快进
- 因素
- 抖动
- 谁会遇到
- 只有某个角色看起来异常
- 何时出现
- 做特定操作时, 一直
- 负责方
- 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 服务器:按动作附带的输入时间的间隔执行(时间只在允许范围内采信);或者不拒绝扎堆到达的动作,按最小间隔(公共冷却)拉开后依次执行;不要只按到达时间做冷却检查(会吞掉正常输入)。客户端:给动作附上输入时间再发送。
- 监控图上
- 仅部分偏高 · 各玩家的动作执行间隔
- 查看位置
- 在服务器日志中按玩家记录动作的到达时刻、执行时刻、客户端附带的输入时间(如果有),比较执行间隔和输入间隔。同时在服务器侧抓包,看该玩家包的到达间隔
- 确认依据
- 输入间隔正常,服务器到达、执行间隔却挤在几 ms 之内,挤在一起的时刻与其他人反馈快进的时刻重合
- 排除依据
- 输入时间的间隔本身就挤在一起,是客户端或脚本方面的问题。服务器执行间隔均匀,只在别人画面上看起来挤在一起,是观看者的线路问题
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
服务器每收到一个 ServerMove 就计算一次移动,用与上一次移动的时间戳差值确定时间间隔。与服务器时间差得太多时丢弃该次移动 - Deterministic Lockstep Gaffer On Games
输入到了就应用,即使按 60 Hz 发送,间隔也不均匀,结果忽快忽慢
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“快进”的原因
查看含图示和实验的原卡片