История должна храниться вне памяти WebSocket-процесса — в долговечной БД. После переподключения клиент запрашивает сообщения после последнего подтверждённого номера или курсора.
Как обеспечить сохранение истории диалога при перезапуске WebSocket сервера?
История должна храниться вне памяти WebSocket-процесса — в долговечной БД. После переподключения клиент запрашивает сообщения после последнего подтверждённого номера или курсора.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
История должна храниться вне памяти WebSocket-процесса — в долговечной БД. После переподключения клиент запрашивает сообщения после последнего подтверждённого номера или курсора.
Назначайте сообщениям стабильные ID и порядок внутри диалога. Подтверждение успешного приёма отправляйте после сохранения; повторную отправку дедуплицируйте по клиентскому ID. При реконнекте клиент передаёт последний полученный курсор, а сервер дочитывает пропущенное с проверкой доступа. Redis Pub/Sub может помогать доставлять live-события между серверами, но сам по себе не является историей. Нужны также правила для разрыва между чтением истории и подпиской на новые сообщения, чтобы не пропускать события.