Если серверная onDisconnect
не подходит для вашего варианта использования, общий подход действительно заключается в реализации вашего собственного механизма. Предложенный вами подход keep-alive все еще нуждается в арбитре, чтобы определить, когда соединение не работает. Это определенно возможно, но обычно требуется облачная функция или более постоянный слушатель.
Вместо этого я обычно добавляю lastSeenTimestamp
для каждого пользователя / соединения, а затем имею клиентов, которые их читают временные метки для всех определяют, насколько sh они хотят, чтобы соединение было, прежде чем считать, что пользователь устарел.
Вы все равно можете использовать onDisconnect
в этом случае для очистки данных, но вы больше не привязаны к интервалу тайм-аута сокета сервера, чтобы пометить пользователя как неактивного в ваших клиентах.