firebase实时数据库参考(/.info/connected)它是如何工作的

firebase实时数据库参考(/.info/connected)它是如何工作的,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我正在使用 firebase.database().ref('.info/connected').on('value', function (snapshot) { if (snapshot.val() !== false) { console.log("connected"); } }) 检测用户的存在。我试图了解实时数据库如何检测客户端是否连接。现在对我来说这是一种黑魔法。换句话说,用户在.inf

我正在使用

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

    })
检测用户的存在。我试图了解实时数据库如何检测客户端是否连接。现在对我来说这是一种黑魔法。换句话说,用户在
.info/connected
字段下被视为
true
false
的条件是什么


例如,我知道如果要设置为
false
,用户可以离开找到我的web应用程序的页面。但具体的条件是什么?这是否意味着如果用户执行
firebase.initializeApp(配置)代码,并且我在同一文件中运行状态跟踪,则认为用户已连接?

当应用程序中的客户端连接到Firebase实时数据库后端时,
.info/connected
节点返回true。没有什么比这更重要的了,一旦建立了连接,客户端/SDK简单地将节点标记为
true
,否则确保它是
false


这与状态没有严格的关系,因为此节点只告诉客户端它们是否连接到数据库服务器。但是您通常会将
.info/connected
onDisconnect
处理程序组合到。

对不起,弗兰克,我忘记回答这个问题了。我使用Firestore提供的解决方案成功建立了存在感。但是我试图理解
.info/connected
是如何检测用户在线还是离线的。到目前为止,当页面加载时,用户变为联机,但我喜欢修改它以执行其他操作。
.info/connected
不会检测用户是联机还是脱机,而是检测数据库客户端是否连接到数据库服务器。为此,它检查用于与数据库通信的套接字是否打开。服务器使用套接字的另一端来检测客户端是否仍在连接,如果该连接已关闭,它将为该客户端执行
onDisconnect
处理程序。好的,这更有意义。但是是什么触发了套接字打开呢?是不是firebase.initializeApp(config)
?不,在那个阶段还不知道您是否使用实时数据库。套接字在您第一次与数据库交互时打开,因此可以通过读/写操作打开。通过查看Chrome开发工具中的WebSocket(
WS
)流量,很容易看出这一点。