Firebase: Как реализовать «действовать только тогда, когда другое устройство подключено к сети»? - PullRequest
0 голосов
/ 11 декабря 2018

Я реализую коммуникационное приложение, использующее базу данных Firebase в реальном времени с определенными игровыми функциями, которые нужны обоим пользователям онлайн.Учтите, что пользователи A и B общаются, и существуют определенные действия, которые A может предпринять, только если B также подключен к сети (B подключен к базе данных реального времени Firebase).Как я могу это реализовать?

То, что я уже пробовал

  1. У меня есть узел с именем user/user_id/online.Я обновляю его всякий раз, когда база данных подключена к сети, и удаляю его при отключении с помощью функции onDisconnect.Проблема с этой логикой заключается в том, что сервер firebase не выполняет логику onDisconnect до истечения времени ожидания сокета на стороне сервера, которое в большинстве случаев занимает более минуты (даже вызов goOffline из-за интернет-ошибки также занимает больше минуты), но в моем случае,допускается задержка от 1 до 3 секунд.
  2. У меня есть узел с именем user/user_id/last_online, и я обновляю его раз в 2 секунды, а пользователь A будет проверять пользователя B's в последний раз в сети перед тем, как принимать какие-либодействие.Проблема с этой логикой заключается в том, что это резко увеличит скорость загрузки данных.

1 Ответ

0 голосов
/ 11 декабря 2018

Похоже, у вас уже есть лучший подход со встроенными примитивами, то есть системой присутствия Firebase.Одно замечание по поводу onDisconnect: обнаружение грязного разъединения займет всего много времени (сбой приложения, потеря сетевого подключения и т. Д.).В случае чистого отключения (приложение закрыто), onDisconnect должен сработать почти сразу.

Если поведение onDisconnect не подходит для ваших нужд, вам необходимо реализоватьотдых в вашем приложении.

Первое, что пришло на ум, - это активный keep-alive, который, похоже, уже используется в # 2.Учитывая, что вы хотите задержку не более 3 секунд, ваш 2-секундный пинг проверки активности кажется разумным интервалом.

Это действительно увеличит использование полосы пропускания.Учитывая ваш вариант использования и то, как работает платформа, я не вижу другого способа реализовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...