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

游戏卡顿白皮书 › L1 客户端游戏进程

主线程数据包处理瓶颈 Network processing on the main thread

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

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

收到的数据包每帧只处理固定数量时,一下子涌来的数据包会不断顺延到下一帧。

起因 人多的地方每秒涌入数千条更新 → 结果 主线程受每帧处理量上限限制,读不完 → 画面表现 其他人的动作体现得越来越晚,而且是集中补上

症状
快进, 操作延迟
因素
停顿, 延迟
谁会遇到
特定地点/分线, 只有我
何时出现
人多的时候
负责方
主责 研发团队·客户端开发 · 配合 研发团队·服务器开发
研发团队要做的事
客户端:接收与解析放到单独的线程,同一对象的旧位置更新合并后只应用最新的。服务器:人多的地方降低远处角色的更新频率,减少发送量。
数值参考
处理不完的数据包不断堆积,几秒钟就足以积压 1 秒的量。
监控图上
随人数/负载上升 · 未处理的接收数据包数、从接收到应用的延迟
查看位置
让客户端把每帧没处理完、留下来的数据包数,以及数据包从到达到应用进游戏的延迟写进日志,和周围人数一起看
确认依据
人多的地方剩余数据包数和应用延迟持续增加,同一时刻 ping 和服务器的发送间隔正常
排除依据
没有应用延迟、数据包本身到得晚,是网络段的问题。帧耗时大幅上升,看“大规模同屏渲染负载”
确认手段
需要游戏服务器/客户端的日志和指标

出处

  1. Actor Priority in Unreal Engine Epic Games
    带宽不足时,按与观察者的距离、距上次复制的时间给 Actor 排优先级,不会每次都复制全部 Actor
  2. Replication Graph in Unreal Engine Epic Games
    在线人数多、复制对象多的游戏(如 MMORPG)要按位置分组、只发送需要的对象,才能避免服务器 CPU 瓶颈

相关原因

同一层:L1 客户端游戏进程

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

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