共有ボード
Go が D1 に書き込み、そのトピックの Durable Object が hx-ws 経由で開いているすべてのタブにフラグメントをプッシュします。
ボードの仕組み
- 変更はそれぞれ、Worker 上の Go ハンドラーへのフォーム送信です。ハンドラーは Cloudflare の SQLite データベースでありボードの信頼できる唯一の情報源である D1 に書き込み、トピックのバージョンを上げます。
- 次にハンドラーはボード全体を言語ごとに 1 回ずつレンダリングし、トピックの Durable Object に渡します。Durable Object はそれを開いているすべてのタブに送ります。ブラウザーでは何もマージしません。プッシュのたびにボードが置き換わります。
- タブは WebSocket Hibernation 上の htmx 4 の hx-ws で接続を保つため、何も変化がない間は、待機中のタブが千個あってもほとんどコストがかかりません。バッジには今ここにいる人数が表示されます。
- プッシュにはそれぞれ、元になったバージョンが付いています。タブは表示中のボードより古いプッシュを無視するため、ネットワーク上で行き違った変更によって表示が巻き戻ることはありません。
- 1 つの接続から 10 秒間に 60 件まで変更でき、1 つのトピックでは最大 1,000 個のタブを開けます。