Перейти к содержимому
6 / 15

Как спроектировать чат с гарантированной доставкой сообщений?

Чат — это два разных механизма под одной вывеской: транспорт (WebSocket-соединение к конкретному узлу) и хранилище истории (сообщения с монотонным номером внутри диалога). Соединение делает узел-шлюз состоянием, поэтому нужен реестр «пользователь → узел» в общем хранилище, а маршрутизация между узлами идёт через шину. Порядок гарантируется не временем отправки, а последовательным номером, который присваивает сервер внутри диалога: клиент дочитывает всё, что больше его последнего номера. Офлайн-пользователь ничего не теряет именно из-за этого — доставка сводится к «догони номер». Главный компромисс — где хранить историю: одна таблица, партиционированная по диалогу, простая и понятная, но требует плана на рост.

Как спроектировать чат с гарантированной доставкой сообщений? | JScriptiser