我注意到當我設置onDisconnect()
,在不同的計算機上打我的應用程序,並關閉WIFI,我的數據庫沒有更新;但是,當我重新打開WIFI時它會更新。這令我感到擔憂,因爲我正在與期望的移動用戶構建應用程序,並且我想優雅地處理臨時連接丟失。當關閉WIFI時Firebase onDisconnect
另一方面,/.info/connected立即知道斷開連接。
任何人都可以解釋爲什麼會發生這種情況,並且如果有一種方法可以防止連接重新建立後斷開連接?
更新代碼:
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.');
});
}
});
結果:的DB 不網上設置爲false,當我打開關閉Wi-Fi,除非我等待約1分鐘。當我打開Wi-Fi時,db 確實在線設置爲false。
onDisconnect事件在服務器上進行管理,而不是在客戶端進行管理。它們在連接斷開時觸發,並且客戶端(除了保持連接狀態)都不會影響到這一點。但是,您應該監視您的更新功能的成功回調 - 立即觸發並可能提供線索 – Kato
@Kato好的,謝謝。我檢查了onDisconnect回調,並確實在我關閉Wi-Fi之前進行了註冊。我明白爲什麼'userRef.onDisconnect()。cancel()'不起作用,但似乎很奇怪,我的更新只發生在Wi-Fi恢復後。任何見解? – jwzirilli
在onDisconnect創建之前關閉了WiFi嗎?我可以看到爲什麼onDisconnect會在重新連接時建立,因爲它位於'.info/connected'監聽器中。也許它在你離線之前沒有被調用?這裏沒有足夠的代碼和理解你的環境來實現智能化的飛躍。 – Kato