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

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

顺序往返多的协议(chatty) Chatty protocol / sequential round trips

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

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

一次操作需要依次与服务器往返多次时,ping 就要乘以这个次数。

起因 打开商店 → 请求列表 → 确认价格 → 购买 → 刷新背包,每一步都单独请求 → 结果 收到上一个请求的回复后才发下一个请求 → 画面表现 ping 150 ms 时买一次东西要将近 1 秒。加载时间格外长

症状
操作延迟, 连不上/无限加载
因素
延迟
谁会遇到
仅特定功能, 只有我
何时出现
做特定操作时, 刚登录/维护结束后
负责方
主责 研发团队·服务器开发 · 配合 研发团队·客户端开发
研发团队要做的事
服务器:修改协议,把多个步骤合并成一次请求和响应(例如在购买响应里一并带上更新后的背包)。客户端:提前获取需要的数据,UI 不等待结果。
数值参考
耗时 ≈ 往返次数 ×(ping + 服务器处理 + tick 等待)。5 次往返、ping 150 ms 时约 0.85~1 秒。
监控图上
一直偏高 · 各功能完成时间,一次操作的往返次数
查看位置
在服务器侧抓包(Wireshark),用测试账号做一次商店购买、登录这类操作,数一数请求与响应交替往返了几次,以及间隔多长。有服务器请求日志时,按会话 ID 归并,看请求数和每个请求的到达、响应时刻
确认依据
一个操作中,请求等上一个响应回来后才依次往返多次,完成时间大约是往返次数 × RTT,ping 越高的地区玩家,同一功能按比例越慢
排除依据
往返只有一两次,却有某个响应耗时很长,则是服务器处理或 DB 方面的原因。与 ping 无关、所有玩家同样慢,看服务器负载
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. Chatty I/O antipattern Microsoft Azure
    大量小 I/O 请求的累积延迟会大幅降低响应能力。建议把请求合并成数量更少、单个更大的请求

相关原因

同一层:同步设计

其他层中同样导致“操作延迟”的原因

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