跳轉到

D-20260724-01|signaling scoped signed v2+官方部署拓撲定案

背景與驅動力

正式部署檢核輪:全域 lobby 與「整場只選一個 provider」假設撐不起多房多場並行與社群 endpoint 的信任邊界;官方 signaling 的部署面也需要從 D-20260722-01 記錄的「當時 Node 現況」定為長期形狀。

考慮過的選項

  • 維持全域 lobby、單一 provider:session 邊界與信任邊界糾纏,廢除。
  • 社群 signaling 公開目錄自動信任:不建立——社群 endpoint 只能由玩家明確加入。
  • scoped signed v2+ 官方 Cloudflare 現況(採納)。

決定

  • signaling 升 scoped signed v2:每個 room:<code>match:<digest> 建立獨立 session;WebSocket 與 GossipSub 共用 canonical DAG-CBOR SignedPayload envelope、nonce replay guard 與 closed SDP/ICE DTO。client 保留單一 active WSS+Gossip fallback,依 remote 最近有效入站 transport 回覆並跨 transport 去重;官方 WSS 故障或免費額度耗盡時有限次降級、多人功能不整體失效。
  • active signaling transport 意外關閉必須經 session/mux 的 liveness contract 向上傳播;room dialer 原子清空 dead session、釋放舊 transport,重跑同一 provider chain,並把新 session 換綁到原本的 RoomPresencePort 與撥號入口。重連期間操作 fail offline;同時只准一個重連。明示離房/close/dispose 不觸發重連,回前景只在 session 缺席或已關閉時補一次有界嘗試。
  • 官方 signaling 現況 =Cloudflare Worker+SQLite-backed Durable Objects:front router 只做 admission、room/match 各自落 DO;Hibernation、TTL、bounded nonce/token bucket 與不可逆 IP bucket 共同限制資源。Node adapter 保留給公版自架者;兩 adapter 通過同一 conformance vectors、公版 CI 只驗證與 dry-run。
  • 部署拓撲定案:open-4wd-signalingopen-4wd-pinning 皆為零 secrets、永不直接部署的 public templates,官方分別從私有 open-4wd-signaling-deployopen-4wd-pinning-deploy 跟版;signaling 用 Cloudflare、pinning/bootstrap 與 TURN 用各自適合的部署面,避免全部落在同一故障域;穩定域名固定為 open4wd.orgsignal.open4wd.orgpin.open4wd.orgbootstrap.open4wd.orgturn.open4wd.org.com 只做 HTTP 301。
  • relayNodes 與 unauthenticated bootstrap 清單完全分離;pinning 現階段維持 full-refold——quorum-follow 仍是 D-20260721-01 已核准目標,待主 repo 模式落地、re-vendor 與領域事件窗 e2e 後切換。

後果與影響

多房並行與社群自架的信任邊界收口,官方部署面自此有長期定案而非過渡描述。明確延後項留帳:實際私有 repo 與官方部署、中央 rendezvous、Vercel/Deno adapter、TURN 多節點 HA、真實 ledger/signer/bootstrap/legal 值。拓撲與域名權威見 部署實際值與初始拓撲.md