跳轉到

D-20260809-06|Signaling Worker 採 Socket Presence Liveness

背景與驅動力

Node adapter 可用 transport ping/pong 判斷連線,Cloudflare Durable Object hibernation 模式卻可能在 socket 仍存在時長時間沒有 application message。若兩端共用「最後訊息時間」回收 peer,合法 idle 房間會只在 Worker adapter 被誤踢;新增 client heartbeat 又會擴大公開 wire 與背景節流面。

考慮過的選項

  • 新增 client application heartbeat:跨 adapter 一致,但增加協定、流量與背景節流風險。
  • Durable Object 自動回應 heartbeat:仍需要新 wire,且不能直接證明 runtime socket 已消失。
  • Node 保留 transport liveness;Worker 以 hibernatable socket presence 更新存活:採納。

決定

Node adapter 繼續使用平台 ping/pong。Worker alarm 每次以實際 hibernatable WebSocket snapshot 判定 已註冊 peer 是否仍存在;存在的 idle socket 視為 alive,只有 runtime presence 消失後才依共同 peer timeout 回收。尚未 REGISTER 的 socket 仍受 register deadline 限制。不新增 client heartbeat 或平行 keepalive message。

後果與影響

兩個 adapter 保持相同對外 signaling 行為,但 liveness 證據依平台能力不同;共用 timeout 常數仍由 既有 owner 與 parity gate 看守。客戶端不需為 server 平台差異承擔額外協定與電量成本。