Общая доска
Go записывает данные в D1, затем Durable Object темы отправляет фрагмент во все открытые вкладки через hx-ws.
Как работает доска
- Каждое изменение — это отправка формы обработчику на Go в Worker. Он записывает изменение в D1 — базу данных SQLite от Cloudflare и единственный источник истины для доски — и повышает версию темы.
- Затем обработчик отрисовывает всю доску по разу для каждого языка и передаёт её в Durable Object темы, который рассылает её во все открытые вкладки. В браузере ничего не объединяется: каждое обновление заменяет доску целиком.
- Вкладки остаются на связи через hx-ws из htmx 4 поверх WebSocket Hibernation, поэтому тысяча неактивных вкладок почти ничего не стоит, пока что-нибудь не изменится. Значок показывает, сколько человек сейчас здесь.
- Каждое обновление несёт версию, на основе которой оно сделано. Вкладка пропускает обновление старше доски, которую она показывает, поэтому изменения, разминувшиеся в сети, никогда не откатываются назад.
- Каждое подключение может внести 60 изменений за 10 секунд, а тема вмещает до 1000 открытых вкладок.