Выбор ответа Middle Мобильный system design обновлено

Догрузка пропущенных сообщений

Вопрос

Мессенджер был закрыт два дня. Как при открытии получить пропущенные сообщения эффективно?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Запросить изменения после последнего курсора пачками, начиная с недавних чатов, показывая базу. У каждого сообщения или события монотонный порядковый номер.

Варианты ответа

  1. Скачать заново всю историю всех чатов и заменить локальную базу целиком
  2. Запросить изменения после последнего курсора пачками, начиная с недавних чатов, показывая базуправильный ответ
  3. Ждать, пока сервер сам пришлёт все пропущенные сообщения по WebSocket одним большим сообщением после подключения
  4. Попросить пользователя потянуть вниз каждый чат вручную, чтобы не грузить лишнее

Разбор

У каждого сообщения или события монотонный порядковый номер. Клиент хранит последний полученный и запрашивает «всё после», постранично, сначала для чатов, которые видны в списке. UI сразу показывает локальную базу. Полная выгрузка тратит трафик и время, огромное сообщение по сокету ненадёжно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.