簡體   English   中英

如何通過DDP連接訂閱服務器端的其他Meteor服務器?

[英]How to subscribe via DDP connections to other Meteor servers on the server side?

我想在兩個Meteor應用程序之間同步數據。 因此,我已經在兩個應用程序上發布了一個包含相關數據的集合(顯然,它使用完全相同的程序包運行相同的Meteor版本0.8.1.2)。

我跑的時候

var testConnection = DDP.connect('http://10.0.10.20:3003/');
var newCollection = new Meteor.Collection('remoteData', testConnection);
testConnection.subscribe('remoteData');
console.log('Data list starts here:');
newCollection.find().forEach(function(data){console.log(data)});

在任何客戶端上,我都會獲得所有預期的數據列表。 服務器端沒有任何東西,所以newCollection保持為空(我也知道調試服務器確實執行了testConnection.subscribe('remoteData'),另一台服務器執行其相應的發布功能中的所有內容,就像客戶端一樣)。

我試試這種方式,因為這里的海報https://stackoverflow.com/a/18360441提到這樣的東西在客戶端和服務器上工作。 查看訂閱文檔( http://docs.meteor.com/#meteor_subscribe ),它說它只能在客戶端上工作,這可以解釋我的服務器上沒有任何反應,但是會像DDP.connect一樣有點奇怪( http: //docs.meteor.com/#ddp_connect )似乎是為客戶端和服務器而設,並支持訂閱。

我在這里想念一下嗎? 如果訂閱在這種情況下無法正常工作,那么在兩台服務器之間獲得訂閱功能的最佳方法是什么? 我知道我可以使用自定義Meteor.methods,但這看起來有點像拐杖相比它對訂閱的效果有多好,所以我對任何更好的解決方案都非常感興趣...

就像user728291指出的那樣,問題是在這種情況下服務器不在另一側的發布函數中等待this.ready(),因此當在服務器上調用newCollection.find()時,newCollection仍然是空的(但是將在不久后收到數據)。 似乎在客戶端上newCollection.find()試圖等待服務器發布函數的this.ready()(我也絕對不確定,也許它在客戶端工作的原因是完全不同的)因此在客戶端它當時不是空的。

無論如何,當你總是在subscribe的回調中觸發find()時,你是安全的,它會將任何函數解釋為onReady回調( http://docs.meteor.com/#meteor_subscribe )。

那么保證在服務器和客戶端上運行的是什么

var testConnection = DDP.connect('http://10.0.10.20:3003/');
var newCollection = new Meteor.Collection('remoteData', testConnection);
testConnection.subscribe('remoteData', function() {
    console.log('Data list starts here:');
    newCollection.find().forEach(function(data){console.log(data)});
});

暫無
暫無

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

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