Burst 突发阻塞模型:暂存与爆发式推送的测试价值
Burst 是 QNET 2.0 版重点新增的弱网模型。它模拟的是一种很真实的现象:路由器或底层硬件发现链路不通时先把包攒着,链路恢复后一口气推出去。数据一个不丢,但到达时间高度聚集。
机制拆解
- 弱网时段:数据包不转发也不丢弃,进入暂存队列;
- 恢复时段:暂存队列整体推送,表现为一波密集到达的包;
- 参数值:Burst 数值以 ms 计,描述阻塞行为的时间尺度,需要与连续丢包的放行参数配合设置。
从官方发布的波形示例可以直观看到差异:周期弱网页引用的「上行周期弱网-Burst 设置 1000ms 放行/1000ms 弱网时长」图中,每个恢复窗口都出现一簇陡峭的延迟尖峰——包都在,只是挤在同一时刻到达。
Burst 与完全丢包对照
| 维度 | 完全丢包 | Burst |
|---|---|---|
| 弱网时段的包 | 丢弃 | 暂存 |
| 恢复后 | 等新请求重传 | 旧数据集中涌到 |
| 应用层现象 | 超时、断线 | 一次性涌入大量过期数据 |
| 考验点 | 超时/重连逻辑 | 缓冲区、状态覆盖、乱序处理 |
Burst 最能暴露的三类 bug
- 状态覆盖错误:恢复瞬间旧数据晚到,把新状态覆盖回去(聊天消息顺序错乱、状态回退);
- 缓冲区溢出:爆发流量冲垮接收缓冲,引发崩溃或丢帧;
- UI 卡顿:一批过期渲染数据同时到达,界面短暂僵住。
这三类问题在静态丢包模板下永远不会出现,因为包根本回不来;只有 Burst 能重现「迟到但没缺席」的形态。
怎么组合参数
- 先用周期弱网确定放行/弱网的节奏(比如 5 秒/2 秒);
- 弱网类型选 Burst;
- 对实时性敏感的应用先用小值(几百 ms)起步,观察应用能否消化爆发。
在 adb 自动化里对应的参数
Burst 在指令行里对应 out_burst/in_burst 键值,与放行参数成对使用,完整表见adb 参数速查表;想跑一个真实示例见adb 自动化实战。
一句话总结:完全丢包测「断」,Burst 测「乱」,两者结合才是完整的断线演练。