Используйте heartbeat и срок действия присутствия, а не единственный флаг online. Пользователь online, пока хотя бы одно его соединение или устройство имеет актуальный heartbeat.
Определение текущего статуса пользователя (online/offline) в видеотрансляционной системе
Используйте heartbeat и срок действия присутствия, а не единственный флаг online. Пользователь online, пока хотя бы одно его соединение или устройство имеет актуальный heartbeat.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
В системе видеотрансляций лектора проводят занятия, а слушатели подключаются к их докладам. Требуется разработать быстрый и надёжный механизм, позволяющий определить, находится ли конкретный пользователь в сети (online) или нет (offline).
Ответ
Используйте heartbeat и срок действия присутствия, а не единственный флаг online. Пользователь online, пока хотя бы одно его соединение или устройство имеет актуальный heartbeat.
На connect зарегистрируйте connection_id, периодически обновляйте expires_at, на штатный disconnect удаляйте запись. При аварийном обрыве статус пропадёт по TTL. Для нескольких серверов нужен общий быстрый storage; запись по пользователю должна учитывать несколько вкладок и устройств. Интервал heartbeat и TTL задают компромисс между нагрузкой и задержкой определения offline. Абсолютно мгновенное распознавание сетевого обрыва невозможно.