这类问题看似集中在一个 API 或参数上,真正决定可用性的却是状态归属、资源上限和失败后的恢复方式。 同一 SSID 下漫游可能只改变二层路径,也可能跨 VLAN 获得新 IP。短抖动不应立刻重建,持续 selected pair 无流量则需要 restart。
网络诊断必须区分观察事实与推断结论。候选类型、选中路径和阶段耗时可以证明连接过程,完整 IP 或一次探测结果既不必要,也不足以代表真实可达性。
先把实现决策说清楚
落地时要把关键选择变成稳定契约:输入如何校验、状态由谁推进、资源何时释放、旧版本如何降级。只有这样,后续优化才不会改变原有语义。
- 设置 disconnected 宽限收集连续证据,network change 触发去抖;一次有 epoch 的 ICE restart 保留任务,超时才重建会话。
- 把协议事实、用户意图和自动恢复分层;自动化只能恢复事实,不能推翻用户明确选择。
- 兼容性通过显式能力协商决定,旧客户端得到可解释的降级路径,而不是进入半可用状态。
“Wi-Fi 漫游中的 WebRTC:SSID 没变,IP 和路径可能已经变了”的交付标准是正常路径可用、异常路径收敛、资源有界,并且用户能理解系统为何采用当前状态。 这样得到的不是演示代码,而是能解释、能降级、能回滚的生产能力。
最容易漏掉的失败路径
边界条件会把隐藏假设变成真实事故。弱网、刷新、并发和容量上限必须组合测试,因为单独出现时它们往往都能被重试掩盖。
- 每个 disconnected 立即重建会在漫游抖动中产生多连接;旧 AP 包迟到若无 epoch 会污染新候选与进度。
- 只修正界面状态而没有清理底层资源,下一次操作继承队列、锁或过期凭据并再次失败。
- 只在理想数据量下测试,真实的大文件、长会话或高并发会越过隐含上限并产生级联故障。
上线前怎样验证
验证需要先写预期状态轨迹,再执行故障注入。每个阶段同时核对用户可见结果、两端协议状态、持久记录和资源计数,才能证明闭环成立。
- 在同 VLAN 与跨 VLAN AP 间移动,分别运行聊天、文件和屏幕,测丢包窗口、恢复时间、任务连续与重复提示。
- 用乱序、重复和延迟消息驱动状态机,确认旧版本被丢弃且显式停止不会被自动恢复覆盖。
- 对日志和埋点做字段白名单检查,证明内容载荷、密钥、完整 IP 与用户可识别信息不会离开设备。
完成并不等于主路径跑通,而是每个终态都能对账、每个自动动作都受用户意图约束、每个成本都有明确上限。