簡體   English   中英

如何在Meteor中從服務器向客戶端發送消息?

[英]How to send a message from Server to Client in Meteor?

我想從“ server / main.js”中的服務器腳本向“ client / main.js”中的Cliente腳本發送消息。

我嘗試了一些與發布/訂閱的事情,但我一定做錯了什么。 流星服務器運行所在的控制台上出現了成千上萬條錯誤消息,令人發瘋。

服務器

Meteor.publish("test", function () {
    this.ready();
    return 'some test';
  });

客戶

Template.panel.onCreated(function loginOnCreated() {
  Tracker.autorun(function () {
    const handle = Meteor.subscribe('test');
    if(handle.ready()){
      alert('Done')
    }
  });
});

無論如何,我需要一個服務器方法來在客戶端就緒時調用它。

原因:Template.panel.onCreated無法從Mongodb查詢數據。 它必須等待幾秒鍾。 因此,我想做的事在客戶端的Template.panel.onCreated中是不可能的。 它必須等到Mongo准備好為止。

我怎樣才能做到這一點?

你應該把Meteor.subscribe之外Tracker.autorun

我認為問題在於,因為handle是反應性數據源,所以當它更改Tracker.autorun的功能Tracker.autorun重新運行時,它將再次訂閱服務器,將創建新的句柄,並且新的句柄會導致函數再次運行。 這樣一遍又一遍地循環,並向控制台拋出許多錯誤消息

它必須等待幾秒鍾。

我假設您從Mongo檢索的數據對於dom人口是必要的。 對於任何等待的過程,您可以使用加載程序。 您可以通過將助手設置為“ false”來完成此操作,直到您沒有收到服務器的響應為止。 當您收到該響應時,請填充dom並將此字段設置為true。

就像是:

{{#if dataLoaded}}
  {{domYouWantToPopulate}}
{{else}}
  {{spinner}} //your loading icon template
{{/if}}

或者,即使您不需要為dom加載數據,也可以為停止用戶加載圖標,以便停止操作,直到接收到數據為止。

因此,事實是,假設您正在開發中,則只有客戶端,而在實際情況下,將只有一台服務器和許多客戶端。 因此,從處理和可行性指標來看,從服務器在每個客戶端上調用客戶端功能都是錯誤的。 這就是為什么我們有API從服務器獲取響應的原因,因此服務器只能將響應發送給已命中該API的客戶端。

您可以通過更新數據庫來做到這一點,並且客戶端幫助程序方法會提醒它服務器實際上要說些什么,或者您可以使用如下軟件包:

https://atmospherejs.com/raix/eventddp

它允許服務器啟動消息傳遞。 我沒有嘗試過,但是它來自一個很好的來源

暫無
暫無

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

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