【问题标题】:firebase realtime database ref (/.info/connected) how does it workfirebase 实时数据库参考 (/.info/connected) 它是如何工作的
【发布时间】:2020-09-04 09:59:54
【问题描述】:

我正在使用

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

    })

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

例如,我知道为了成为false,用户可以离开找到我的网络应用程序的页面。但具体的条件是什么?这是否意味着如果用户执行firebase.initializeApp(config); 代码,并且我在同一个文件中运行状态跟踪,那么该用户被认为是连接的?

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    当应用中的客户端连接到 Firebase 实时数据库后端时,.info/connected 节点返回 true。仅此而已,客户端/SDK 简单地将节点标记为true,一旦它建立连接并确保它是false,否则。

    这与存在并不严格相关,因为该节点仅告诉客户端他们是否连接到数据库服务器。但是您通常会将.info/connectedonDisconnect 处理程序组合到build a system where you report your own presence, and then can see the online status of other users

    【讨论】:

    • 对不起,弗兰克,我忘了回答这个问题。我使用 Firestore 提供的解决方案成功地建立了存在感。但我试图了解.info/connected 如何检测用户是在线还是离线。到目前为止,当页面加载时,用户就在线了,但我喜欢修改它来做其他事情。
    • .info/connected不检测用户是在线还是离线,而是检测数据库客户端是否连接到数据库服务器。为此,它检查用于与数据库通信的套接字是否打开。服务器使用套接字的另一端来检测客户端是否仍然连接,如果该连接关闭,它会为该客户端执行onDisconnect 处理程序。
    • 好吧,这更有意义。但是是什么触发了套接字打开?是firebase.initializeApp(config)吗?
    • 不,在那个阶段还不知道您是否使用实时数据库。当您第一次与数据库交互时打开套接字,因此通过读/写。通过查看 Chrome 开发工具中的 WebSocket (WS) 流量很容易看出这一点。
    猜你喜欢
    • 2019-12-31
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多