簡體   English   中英

流星onConnection客戶端掛鈎?

[英]Meteor onConnection client side hook?

流星上的客戶端是否有一個onConnection鈎子? 這是我的問題:我試圖在任何時候檢測Meteor重新連接到服務器,以編程方式基於參數重新訂閱一些數據。

Meteor實際上會自動重新訂閱我的默認訂閱,但是我也有一個基於參數的全局訂閱,並且重新連接后不會重新加載:

Meteor.subscribe('Members', fnGetLastEvent());

我試圖在流星重新連接掛鈎上重新加載它(如果存在)。 提前致謝。

我沒有直接的答案,但是您可以嘗試以下一些方法,看看它們是否適合您的特定用例。

1)在客戶端設置自己的onReconnect回調函數。

Meteor.onReconnect = function() {
  console.log("meteor has reconnected);
  // do stuff
};

我是通過Meteor應用的控制台中的Chrome開發人員工具對此進行測試的。 我設置了onReconnect回調,運行Meteor.disconnect() ,然后運行Meteor.reconnect()並觸發了我的回調。 唯一的警告是,我不確定在建立連接之后還是在連接建立之前運行此回調。

2)將您的subscribe呼叫放入使用Meteor.status()作為反應性數據源的autorun中。 我在我的一個應用程序中進行了類似的檢查,以檢查Meteor是否未連接,然后顯示模式消息,通知用戶其數據不再實時。 這是我用來檢測Meteor何時斷開與重新連接的主要邏輯。

var updateCountdownTimeout;
var nextRetry = new ReactiveVar(0);

Tracker.autorun(() => {
  if (Meteor.status().status === 'waiting') {
    updateCountdownTimeout = Meteor.setInterval(() => {
      nextRetry.set(Math.round((Meteor.status().retryTime - (new Date()).getTime()) / 1000));
    }, 1000);
  } else {
    nextRetry.set(0);
    Meteor.clearInterval(updateCountdownTimeout);
  }

  if (!Meteor.status().connected && Meteor.status().status !== 'offline' && Meteor.status().retryCount > 0) {
    console.log("Connection to server has been LOST!");
  } else {
    console.log("Connection to server has been RESTORED!");
    // put subscription logic here
  }
});

需要注意的是,我不確定第一次加載應用程序時會發生什么。 我不確定您的訂閱邏輯是否會運行,還是只能在重新連接后才能運行(您可以測試一下)。

3)這只是理論上的。 看來您應該應該能夠將您的訂閱參數存儲在Session ,並將訂閱邏輯放入autorun 重新連接后,理論上autorun應再次運行。 假設它在模板的某個位置,則看起來像這樣。

this.autorun(() => {
  this.subscribe('Members', Session.get('sub_params'));
});

4)您可以在客戶端Meteor.connection._stream對象上設置一些可能使用的回調。 可用的選項包括messageresetdisconnect 我之前使用過message回調進行調試(請參見下文)。

Meteor.connection._stream.on('message', function (message) {
  console.log("receive", JSON.parse(message));
});

假設在重新建立連接時觸發了reset ,那么您也許可以在其中放置訂閱邏輯。

Meteor.connection._stream.on('reset', function () {
  // subscription logic here
});

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM