我注意到当我设置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。
答案 0 :(得分:9)
关闭wifi无法以有效的方式关闭套接字。因此,服务器必须等待套接字超时才能触发onDisconnect
。由于这是一个完全服务器端的过程,唯一可能的结果是:
1)不允许用户执行onDisconnect操作(在建立onDisconnect后立即在回调中指示)
2)当套接字超时或断开连接时会触发事件(时间长度完全取决于浏览器/服务器协商(1分钟不合理)
3)Firebase在建立onDisconnect和事件触发之间的一些数据更改使其无效(安全规则将不允许它,因为操作不再有效)
要快速查看你的onDisconnect(),请尝试使用goOffline(),我认为这将正确关闭套接字连接。