你的 WebSocket ping 是由边缘响应、而非 Durable Object 响应的
来源:dev.to — 2026-08-17
📋 概述
作者团队通过 Cloudflare Durable Object 跑 SSH 流量:每台用户机器持有一条到 DO 的出站控制 WebSocket,手机想接入时 DO 让机器回拨。这个基于 WebSocket Hibernation API 的 hub 模式本运作正常,随后开始故障,而所有信号都显示系统「健康」——手机连接立即以 1013 关闭,但那台「看似离线」的机器认为自己还连着:TCP 是 ESTABLISHED、协议层 ping(每 15 秒)每次都成功、应用无任何报错,只有重启应用才能恢复。问题的关键藏在「ping 由谁响应」上。
🔑 核心要点
- 系统基于 WebSocket Hibernation API 的 hub 模式,但故障时所有信号都指向「健康」,只有重启机器应用才能恢复。
- 故障症状:手机连接 /connect/:machineId 立即以 1013 关闭,而「离线」的机器却确信自己仍在线。
- 机器侧 TCP 是 ESTABLISHED、协议层 ping(15 秒一次)每次都成功、应用毫无报错——三处都显示健康。
- 关键教训:WebSocket 的协议级 ping 由 Cloudflare 边缘响应,而非 Durable Object 本身,所以 ping 成功并不代表 DO 还活着。
- 依赖 ping 作为存活判断会掩盖 DO 实际失效,只有理解「谁在回 ping」才能真正定位 1013 关闭的根因。
💡 金句
你的 WebSocket ping 是边缘回的,不是你的 Durable Object——所以 ping 通过不代表它还活着。
👍 0
👎 0
← 返回 dev.to 首页