Два WebSocket-канала в одном приложении — и без драмы
В WikiMind мы развели WebSocket по ролям: один канал — для нотификаций, второй — для совместного CRDT-редактирования документов. Так один сокет не влияет на другой.

В WikiMind мы развели WebSocket по ролям: один канал — для нотификаций (тот самый колокольчик), второй — для совместного CRDT-редактирования документов. Зачем? Чтобы всё не падало доминошкой: если один сокет отвалился, второй живёт своей жизнью.
Нотификационный канал сделали push-only: сервер просто пушит события. Если пользователь офлайн — сообщение в сокет не прилетит, но не потеряется по смыслу: оно всё равно сохраняется в БД и потом спокойно читается через REST. То есть real-time, где можно, и надёжный fallback, где надо.
Для CRDT это особенно критично: совместное редактирование не должно зависеть от судьбы колокольчика. В эпоху, когда все гонятся за real-time UX и AI-collab, такая изоляция — не “nice to have”, а база. Как в офисе: чат может лагать, но документ должен сохраняться 😄