修局域网/中转对比基准:它自己有两个 bug,害产品背了黑锅 这个基准一直是红的(中转那条路报「连接阶段失败: timed out」), 而且报告里写着"这是中转链路的产品 bug"。**查下来不是产品的问题。** == bug 1:两条路用了同一个配对码 == 基准为了排除互相干扰,给两条路**各起一台全新被控端**(设计是对的), 但两台都用了写死的 code="246813"。 中转有「一个配对码只属于一台设备」的规则: 第 1 台(跑局域网)注册成功 -> stop_agent 杀掉进程,但**中转还以为它在线**(last_seen 没过期) 第 2 台(跑中转)用同一个码注册 -> **被拒** 中转日志:配对码 246813 已被 ... 占用,拒绝 ... 而 start_agent 只检查"有没有设备在线" —— 第 1 台僵尸还挂着, 于是**以为新的一台登记成功了** -> 没有任何进程在回包 -> 超时 对照实验(新增 _build/verify_code_reuse.py): 场景 A 同一个码 -> **不通** 场景 B 各用不同码 -> 通 修法:两条路各用不同码;start_agent 的判据从"有没有在线设备" 改成"有没有**配对码正好是这一台要用的码**的在线设备"。 == bug 2:attach 用的还是旧码(我第一版补丁也漏了这处)== relay_connect() 里 `client.attach(code)` 用的还是局域网那个码 —— attach 到一台已经死掉、但中转以为在线的设备上,pair 自然没人回。 修成 `attach(relay_code)`。 == 顺带更新一段过时注释 == 原文写着「当前版本经中转只稳定支撑前 1~2 次交互……这是中转链路的 产品 bug」,并据此把中转的轮数调小、超时调短。 那个 bug **已经修好了**(根因:一条 HTTP/1.1 连接被长轮询和发命令 两个线程同时用,撞状态机抛 CannotSendRequest("Idle"), 异常冒到 _client_loop 外面把 client-relay 线程打死)。 注释不更新会误导后人以为产品还有这个问题。 == 修好之后的实测(本地中转,30 次/路)== 局域网 握手 16ms 成功 30/30 (100%) 中位 0ms P90 0ms 最大 1ms 中转 握手 46ms 成功 30/30 (100%) 中位 15ms P90 29ms 最大 32ms 这是本地中转,量的是**协议本身的开销**(长轮询往返 vs 直连 TCP); 真实跨网络那条腿的 1.0~1.5 秒来自隧道和 4G,是另一回事。 结论:局域网确实是"毫秒级、不耗流量"的那条根本路径 —— 中位 0ms vs 15ms,而且不走任何外网。 踩坑记录:这两处都是"看起来像产品 bug、实际是测试自己的 bug"。 先怀疑测量工具,比先怀疑产品更省时间 —— 上一次(管理页缓存头)也是我拿 curl -I 测 GET 白查了半天。