#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.