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-CBORSignedPayloadenvelope、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-signaling/open-4wd-pinning皆為零 secrets、永不直接部署的 public templates,官方分別從私有open-4wd-signaling-deploy/open-4wd-pinning-deploy跟版;signaling 用 Cloudflare、pinning/bootstrap 與 TURN 用各自適合的部署面,避免全部落在同一故障域;穩定域名固定為open4wd.org、signal.open4wd.org、pin.open4wd.org、bootstrap.open4wd.org、turn.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。