我一直在廣泛使用Firebase,並且仍然只面臨一個實際問題:onDisconnect在我的經驗中不是100%可靠的。現在Firebase onDisconnect不是100%可靠嗎?
如果您先關閉計算機而未先關閉窗口,或者終止瀏覽器,則您有時會使用「垃圾回收器」執行onDisconnect,有時則不會。
我的問題是:我根本就沒有使用/.connected現在,我基本上是用一個簡單的
userRef.set('status', 1);
userRef.onDisconnect().update({ 'status' : 0 });
有什麼不對這種方法?我們是否同意在更新參數在執行時被傳遞到服務器,而不是在窗口卸載之前?
NB:我碰巧嘗試1,以保持一個多窗口狀態,使用下面的方法來保持狀態,如果是關閉的另一個窗口:
userRef.child('status').on('value', function(snap) {
if (snap.val() != 1) {
userRef.set('status', 1);
}
});
我沒有這個這到底是怎麼但是...
我的解決方案:事實上,我剛剛錯過了你學習onDisconnect只觸發一次的部分。要獲得持久的onDisconnect,您需要實現基本的持久性。
Helpers.onConnected = function(callback) {
var connectedRef = lm.newFirebase('.info/connected');
var fn = connectedRef.on('value', function(snap) {
if (snap.val() === true) {
if (callback) callback();
}
});
var returned = {};
returned.cancel = function() {
connectedRef.off('value', fn);
};
return returned;
};
簡單的例子:
this._onConnected = lm.helpers.onConnected(function() {
this.firebase.onDisconnect().update({ 'tu': 0 });
}.bind(this));
然後取消:
if (this._onConnected) this._onConnected.cancel();
this.firebase.onDisconnect().cancel();
問題是,我仍然得到約20%的onDisconnect,它永遠不會被調用,導致人們看起來永遠連接在一起。您是否有任何想法瞭解發生了什麼,因爲100%確定在調用onDisconnect時至少有幾分鐘的連接? – cwehrung
客戶端斷開連接後等待多久?在某些極端情況下可能需要5分鐘。另外 - 你也許有安全規則阻止斷開連接操作? 測試用例也會有幫助。你有超級簡單測試用例的鏈接嗎? –
安德魯,我終於找到了我的問題的來源。我的錯誤:我從未真正意識到onDisconnect僅在您第一次斷開連接時才被調用。這解釋了我們所有的錯誤......我一定會在您的網站上以紅色+粗體顯示。 – cwehrung