游戏卡顿白皮书 › 只有部分人遇到的问题
按连接分配的发送预算/优先级 Per-connection bandwidth budget and priority
原因 ID pt-priority · 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
在含图示和实验的完整版中打开此卡片 →
服务器给每个连接的发送量设上限、按由近及远的顺序发送时,上限定得低的一方收到远处 NPC 会很晚,甚至收不到。
起因 人多的地方,服务器在每个连接的发送量上限内按重要程度依次发送 → 结果 带宽估算偏低的连接(例如因为是后台窗口而确认回得晚的一方),排在后面的实体会被一直往后推 → 画面表现 远处的 NPC 只在一边显示得晚或看不到
- 症状
- 隐身/幽灵实体, 操作延迟
- 因素
- 延迟
- 谁会遇到
- 双开时只有一个客户端, 特定地点/分线
- 何时出现
- 人多的时候
- 负责方
- 主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
- 研发团队要做的事
- 服务器:被推迟的实体随时间推移提高优先级(防止饿死,starvation),保证最低更新频率。客户端:在后台也要按时发送确认,避免带宽估算被压低。
- 监控图上
- 随人数/负载上升 · 各连接被推迟的实体数,各连接的发送量
- 查看位置
- 在服务器上为每个连接记录每个 tick 的发送字节数、发送上限(估算带宽)、没能发出而推迟的实体数,以及各实体距上次发送经过的时间。Unreal 可以在 Networking Insights 中查看各连接的包大小及其中包含的复制实体
- 确认依据
- 看不到的 NPC 是这个连接上被推迟了很久的实体,该连接的上限比其他连接低,人越多被推迟的实体越多
- 排除依据
- 没有被推迟的实体,那只 NPC 也按时发出了,看发送之后的环节(接收缓冲区、加载、显示选项)。所有连接都顶在上限上,是全服发送量或视野设计的问题
- 确认手段
- 需要游戏服务器/客户端的日志和指标
出处
- Actor Priority in Unreal Engine Epic Games
带宽饱和时,按优先级(距离、视线、距上次复制经过的时间)挑选要复制的 Actor。不会每次都复制所有 Actor - State Synchronization Gaffer On Games
优先级累积:这次没装进包的实体下次优先装入,带宽上限实时调整 - Networking Insights in Unreal Engine Epic Games
显示各连接收发包的大小,以及其中包含的复制实体和属性
相关原因
同一层:只有部分人遇到的问题
其他层中同样导致“隐身/幽灵实体”的原因
查看含图示和实验的原卡片