Как спроектировать веб-мессенджер

Разделите постоянное хранение истории, доставку событий и локальное состояние клиента. Используйте устойчивые ID сообщений, идемпотентную отправку и восстановление по серверному курсору.

Короткий ответ

Что ответить на собеседовании

Разделите постоянное хранение истории, доставку событий и локальное состояние клиента. Используйте устойчивые ID сообщений, идемпотентную отправку и восстановление по серверному курсору.

Подробный разбор

Ответ с пояснениями

Условие

Нужен веб-мессенджер с личными чатами, историей, отправкой текста и статусом прочтения. Офлайн-пользователь должен увидеть пропущенные сообщения после подключения. Предложите архитектуру.

Ответ

Разделите постоянное хранение истории, доставку событий и локальное состояние клиента. Используйте устойчивые ID сообщений, идемпотентную отправку и восстановление по серверному курсору.

Сначала уточните число одновременных соединений, размер истории, допустимую задержку и правила хранения. HTTP API обслуживает историю и операции, WebSocket доставляет новые события. Backend проверяет участие в чате, сохраняет сообщение и публикует событие после commit. Клиент сверяет client_message_id, не дублирует оптимистичную запись и догружает пропуск после reconnect. Прочтение удобно хранить как последний прочитанный серверный номер в каждом чате.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее