用 Cloudflare Workers + Durable Objects 寫咗個多人實時電子白板,開個房間、把連結發出去,大家就可以一齊畫。

源碼開放喺 GitHub:crazysarah/cf-whiteboard,wrangler deploy 一分鐘就開到自己嗰塊板。用法:房間名放喺 hash(https://<你的域>/#房間名),同一個 hash 就係同一塊板。

點解要自己寫一個

市面嘅白板工具(Miro、Excalidrawlive 嗰啲)要麼要註冊、要麼有牆。自己寫一個:

  • 零註冊:開連結就畫,房間名即開即用
  • 一個房間 = 一個 Durable Object:DO 係全球單實例強一致,天生就啱做房間狀態
  • WebSocket 用 Hibernation API:空房間唔佔 CPU 時間,hibernated 狀態免費——唔使驚養個白板燒錢
  • 筆畫歷史存 DO 內置 SQLite:每 3 筆落盤,重新打開仲喺度(上限 5000 筆,舊嘅自動清)
  • 截圖直接貼上牆:方便貼參考圖
  • 一邊傾一邊畫:WebRTC 語音 P2P,DO 只轉發 SDP/ICE 信令,媒體流唔過 CF——零成本

架構一句話

/room/<name> 路由到同名 Durable Object;WebSocket 常駐但 hibernated(唔使 CPU 時間);歷史入 SQLite;語音走 P2P 信令通道。

已知取捨

  • 清空係廣播式:任何人按清空,全房清掉(undo 栈留返做後續)
  • 坐標係視口坐標,唔同屏幕比例睇到嘅畫面比例可能唔同(縮放適配後續加)

有興趣可以直接開個房試下,或者攞源碼去 wrangler deploy 一分鐘開埋自己嗰塊板。