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