我想在兩個Meteor應用程序之間同步數據。因此,我已經在兩個應用程序上發佈了一個包含相關數據的集合(顯然,它們使用完全相同的包運行相同的Meteor版本0.8.1.2)。如何通過DDP連接訂閱服務器端的其他Meteor服務器?
當我的任何客戶端上運行
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,但這似乎有點像柺杖相比,它會與訂閱有多好,所以我會非常感興趣的任何更好的解決方案...
也許嘗試'newCollection.find()'回調內部認購,以確保你只是沒有查詢集合有數據之前。我有點驚訝的是,客戶端的集合也不是空的,也沒有任何回調或等待的需要。 – user728291
哦,男人,非常感謝!你的建議可以和Meteor.setTimeout或其他任何東西等待一段時間。也許在客戶端find()總是等待一個集合ready()?我不知道,但因爲它在客戶端上工作,我沒有想到這個問題就是這樣的...... –
令人驚訝的是,當使用'autopublish'包時,不需要在回調中執行'.find()' – Nyxynyx