Эффективная модель обработки серверных событий

Создайте один общий поток соединения, разбирайте JSON один раз и раздавайте типизированные события подписчикам. Иначе каждый collector холодного Flow может открыть собственное соединение.

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

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

Создайте один общий поток соединения, разбирайте JSON один раз и раздавайте типизированные события подписчикам. Иначе каждый collector холодного Flow может открыть собственное соединение.

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

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

Условие

Имеется абстракция соединения с сервером, через которую сервер передаёт поток событий в виде JSON‑сообщений. Различные модули приложения подписываются на определённые типы событий. Требуется спроектировать и реализовать эффективный механизм, позволяющий разным частям системы получать только интересующие их события, минимизировать накладные расходы и обеспечить удобный способ подписки/отписки.

interface ServerConnection {

    // Emits events in JSON format
    fun event(): Flow<String>
}

Ответ

Создайте один общий поток соединения, разбирайте JSON один раз и раздавайте типизированные события подписчикам. Иначе каждый collector холодного Flow может открыть собственное соединение.

Парсер преобразует сообщения в sealed Event; некорректный JSON обрабатывается на уровне отдельного сообщения. Затем shareIn в scope соединения создаёт общую подписку, а потребители выбирают тип через filterIsInstance. replay и буфер задайте по контракту: события можно пропускать или требуется восстановление по ID. Для очень большого числа подписчиков добавляют маршрутизацию по типу, а не фильтруют весь поток каждым модулем. Отписка происходит отменой collector; переподключение и повторная доставка требуют дедупликации.

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

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

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

Подробнее