关闭WIFI时FireStation onDisconnect

时间:2014-07-15 20:28:49

标签: firebase

我注意到当我设置onDisconnect()时,在另一台计算机上点击我的应用程序,然后关闭WIFI,我的数据库没有更新;但是,当我重新打开WIFI时它会更新。这让我很担心,因为我正在构建一个具有预期移动用户的应用程序,我希望能够优雅地处理临时连接丢弃。

另一方面,/。info / connectcted立即知道断开连接和连接。

任何人都可以解释为什么会发生这种情况,并且一旦连接重新建立,是否有办法防止断开连接?

更新代码:

      var connectedRef, userRef;
      connectedRef = new Firebase('https://{fb}/.info/connected');
      userRef = new Firebase('https://{fb}/users/myUser');

      connectedRef.on('value', function (snap) {

        if (snap.val()) {
          userRef.update({ online: true });
          userRef.onDisconnect().update({ online: false }, function () {
            console.log('Turn the Wi-Fi off after seeing this log.');
          });
        }

      });

结果:当我关闭Wi-Fi时,db 不会将在线设置为false,除非我等待大约1分钟。当我重新打开Wi-Fi时,db 将在线设置为false。

1 个答案:

答案 0 :(得分:9)

关闭wifi无法以有效的方式关闭套接字。因此,服务器必须等待套接字超时才能触发onDisconnect。由于这是一个完全服务器端的过程,唯一可能的结果是:

1)不允许用户执行onDisconnect操作(在建立onDisconnect后立即在回调中指示)

2)当套接字超时或断开连接时会触发事件(时间长度完全取决于浏览器/服务器协商(1分钟不合理)

3)Firebase在建立onDisconnect和事件触发之间的一些数据更改使其无效(安全规则将不允许它,因为操作不再有效)

要快速查看你的onDisconnect(),请尝试使用goOffline(),我认为这将正确关闭套接字连接。