ссылка на базу данных firebase в реальном времени (/.info / подключена) как это работает

#firebase #firebase-realtime-database

#firebase #firebase-realtime-database

Вопрос:

Я использую

     firebase.database().ref('.info/connected').on('value', function (snapshot) {
        if (snapshot.val() !== false) {
            console.log("connected");
        }

    })
  

Для обнаружения присутствия пользователей. Я пытаюсь понять, как база данных в реальном времени определяет, подключен клиент или нет. Сейчас для меня это какая-то черная магия. Другими словами, каковы условия для пользователя, который должен рассматриваться true или false в .info/connected поле.

Например, я знаю, что для того, чтобы быть false , пользователь может покинуть страницу, на которой находится мое веб-приложение. Но каковы именно условия? Означает ли это, что если пользователь выполняет firebase.initializeApp(config); коды и что я запускаю отслеживание присутствия в том же файле, то пользователь считается подключенным?

Ответ №1:

.info/connected Узел возвращает значение true, когда клиент в приложении подключается к серверной части базы данных Firebase в реальном времени. Больше ничего, кроме этого, клиент / SDK просто помечает узел как true после установления соединения и гарантирует, что это false иначе.

Это не связано строго с присутствием, поскольку этот узел только сообщает клиенту, подключен ли он к серверам базы данных. Но обычно вы объединяете .info/connected и onDisconnect обработчики, чтобы создать систему, в которой вы сообщаете о своем присутствии, а затем можете видеть онлайн-статус других пользователей.

Комментарии:

1. Извините, Фрэнк, я забыл ответить на этот вопрос. Я успешно создал presence с помощью предоставленного Firestore решения. Но я пытаюсь понять, как .info/connected определяет, находится ли пользователь в сети или в автономном режиме. Пока, когда страница загружается, пользователь подключается к Сети, но мне нравится изменять ее, чтобы делать что-то еще.

2. .info/connected не определяет, подключен ли пользователь к сети или оффлайн, но подключен ли клиент базы данных к серверу базы данных. Для этого он проверяет, открыт ли сокет, который используется для связи с базой данных. Сервер использует другую сторону сокета, чтобы определить, подключен ли клиент, и если это соединение закрыто, он выполняет onDisconnect обработчики для этого клиента.

3. Хорошо, это имеет больше смысла. Но что вызывает открытие сокета? Это firebase.initializeApp(config) ?

4. Нет, на этом этапе еще неизвестно, используете ли вы базу данных в реальном времени. Сокет открывается при первом взаимодействии с базой данных, поэтому путем чтения / записи. Это довольно легко увидеть, посмотрев на трафик WebSocket ( WS ) в инструментах разработки Chrome.