разбор компонента

Координатор мобильной синхронизации

Восстанавливает мобильную сессию после background или потери сети через новый snapshot.

Состояния синхронизации

нет сетинет сети
повторное подключениеповторное подключение
синхронизация снимкасинхронизация снимка
безопасное повторение командбезопасное повторение команд
готовоготово

Иллюстрация по теме

Визуальный ориентир помогает быстрее считать сценарий страницы и не оставлять компонент абстрактным.

Экраны спортивного мобильного приложения на смартфонах
Иллюстрация по теме: мобильная синхронизация должна переживать background, reconnect и возвращение в приложение.

Контракт синхронизации

Inputslast known cursor, local recoverable context
Outputsfresh state, cancelled stale requests
Failure modeduplicate non-idempotent command, replay gap
OwnershipUI владеет представлением и recoverable context; финальное бизнес-состояние подтверждает серверный контракт.

Где держать координатор

Компонент считается самостоятельной границей только если команда может назвать его входы, выходы и невозможные состояния. Если он требует читать provider-specific поля напрямую или хранит финальный статус операции только локально, граница выбрана слишком поздно.

При изменении контракта сначала обновляется state model и совместимость, затем визуальный слой. Это уменьшает риск ситуации, когда новый UI уже ожидает поле или статус, которого старая версия API не гарантирует.

Связанные разборы

Проверки восстановление соединения

  • Reconnect всегда начинает синхронизацию с проверяемой server version.
  • Устаревшие in-flight requests отменяются или их ответы игнорируются по request/version fence.
  • Неидемпотентные команды не replay автоматически.
  • Смена сети не создаёт параллельные активные stream sessions.
  • Background дольше допустимого окна переводит клиент в full resync.
  • Пользователь видит состояние восстановления, если оно влияет на доступность действия.

Почему синхронизация нужна одна на приложение

Восстановление после background — новый sync cycle. Продолжать старую socket-сессию «как будто ничего не произошло» нельзя считать надёжной моделью.

При review команда проверяет не название компонента, а его инварианты: какие данные он имеет право считать финальными, что обязан показать при деградации и как возвращается в согласованное состояние после сбоя.

Возврат после паузы как новая синхронизация

После background или смены сети coordinator создаёт новую connectivity epoch, отменяет устаревшие запросы и получает свежий snapshot. Он не обещает экранам, что старый socket «продолжился» с того же места. Благодаря этому поздний ответ из прошлой сети не может откатить уже восстановленное состояние.

Команды с необратимым результатом не повторяются автоматически. Coordinator может инициировать reconciliation, но решение о новом действии остаётся за пользовательским сценарием и server state.

См. сценарий повторного подключения.

Возврат после паузы — это не продолжение старой сессии

Команда часто воспринимает resume как «просто ещё один экранный event», хотя для пользователя это почти новый вход в продукт. Компонент синхронизации должен заново проверить актуальность snapshot, восстановить только безопасный локальный контекст и не показывать stale-статус как живой. Более подробно этот сценарий разобран в материале о reconnect в мобильном приложении.