游戏卡顿白皮书 › 按症状查找
拉回:14 个原因及负责方
又称:被拉回去、回弹(rubber banding)、位置回退
在含图示的完整版症状词典中打开 →
自己的角色往前走着,又被拽回刚走过的位置。
跑着跑着忽然往回弹 1~5 m。同一段路可能要反复走两三遍。
自己画面上的预测和服务器判定对不上了。可能是自己的输入没到服务器(丢包),可能是服务器的移动校验把这段移动砍掉了,也可能是双方的移动计算结果不同。
导致此症状的原因
L1 客户端游戏进程
- 客户端预测不一致: 自己的客户端先把移动显示出来,服务器却算出了不同的结果,自己的角色就会被拽回去。 (研发团队·客户端开发)
L3 家庭网络
L4 公网链路
- 高峰时段对等互联链路拥塞: 晚上 9~11 点前后视频流量激增,运营商之间的互联链路(对等互联)容易拥塞。 (运维团队·网络运维)
- ECMP 单条路径故障: 运营商和数据中心通往同一目的地的路径往往有多条,每个连接固定走其中一条。只要有一条路径出故障,分到这条路径上的人就会一直卡。 (运维团队·网络运维)
L5 数据中心网络设备
- 线缆不良/端口错误: 光模块或线缆不良时,经过这条路径的数据包会按一定比例损坏。 (运维团队·网络运维)
L6 服务器网卡
- 网卡中断集中在单个核心: 网卡把数据包到达中断只发给一个 CPU 核心时,这个核心就会成为瓶颈。 (运维团队·系统运维)
L13 服务器架构与运维
- 场景切换(服务器间迁移): 进入其他区域或副本时,要把角色数据交给另一台服务器,这个过程中会出现延迟和失败。 (研发团队·服务器开发)
- 匹配/区域分配错误: 没有分到近的区域(region),被分到远区域的服务器,即使线路正常,也只有这个玩家 ping 一直偏高。 (研发团队·服务器开发)
同步设计
- 过于严格的服务器校验: 服务器对移动速度、冷却、射程检查得过于严格时,连因抖动扎堆到达的正常输入也会被拒绝。 (研发团队·服务器开发)
- 预表现后被服务器拒绝: 在自己画面上先显示出来的命中、技能,服务器事后不认可时,明明看到的结果就当没发生过。 (研发团队·客户端开发)
- 指令同步的路径计算不一致: 只互传“去这里”,路径由双方各自计算时,计算稍有差异,角色或怪物就会走上另一条路,然后被拽回原位。 (研发团队·服务器开发)
只有部分人遇到的问题
TCP 重传的根本原因
- 瓶颈队列溢出(拥塞丢包): 路由器、运营商之间的互联链路、数据中心线路这类最窄处的队列一旦满了,新来的数据包就会被丢弃。 (运维团队·网络运维)
- ACK 延迟或丢失(上行饱和): 数据已经顺利到达,但表示“已收到”的 ACK 在塞满的上行队列里被耽搁或丢掉,发送方就会判定为丢包并重传。 (外部·外部)
查看含图示的完整版症状词典