Общая доска

Go записывает данные в D1, затем Durable Object темы отправляет фрагмент во все открытые вкладки через hx-ws.

Темаlobby
Откройте эту страницу в другой вкладке и что-нибудь измените.
…онлайн
71версия 226
hu

hello man

解决

Ggh

Vnn

Как работает доска

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