2013-08-27 191 views
1

我有後端流星服務器,服務和共享多個應用程序的公共集合(只是共享mongo數據庫是不夠的,需要實時更新)。轉發服務器端DDP連接集合到客戶端

 BACKEND 
    / \ 
    APP1  APP2 
    |  | 
    CLIENT CLIENT 

我在後端服務器和應用程序服務器之間運行服務器到服務器的DDP連接。

Atm我只是在從後端服務器訂閱它們之後重新發布應用服務器中的集合。

這一切似乎工作得很好。唯一的問題是,在應用服務器無法查詢服務器端的任何集合,所有的find()響應都是空的,在客戶端(瀏覽器)它都可以正常工作。

它只是一個巧合,它可以工作或者你建議我應該如何設置它。

感謝

回答

2

我意識到這是一個很老的問題,但我想我會分享我的解決方案。我有一個類似的問題,因爲我有兩個將與第三個應用程序(App3)共享數據的應用程序(App1和App2)。

我無法弄清楚爲什麼App1的服務器端無法看到App3中的共享集合...即使App1的客戶端正在看到它們。然後它讓我意識到,我的App1的服務器端像App3的「客戶端」一樣,因此也需要訂閱該出版物。

我將我的DDP.connection.subscribe()調用移動到App1的客戶端文件夾之外,以便它將在App1的客戶端和服務器之間共享。然後,我使用Meteor.setInterval()調用來等待訂閱在服務器端準備就緒,以便使用它。這似乎是訣竅。

這裏有一個簡單的例子:

中的lib/common.js

Meteor.myRemoteConnection = DDP.connect(url_to_App3); 
SharedWidgets = new Meteor.Collection('widgets', Meteor.myRemoteConnection); 
Meteor.sharedWidgetsSubscription = Meteor.myRemoteConnection.subscribe('allWidgets'); 

在服務器/ fixtures.js

Meteor.startup(function() { 
    // check once every second to see if the subscription is ready 
    var subIsReadyInterval = Meteor.setInterval(function() { 
     if (Meteor.sharedWidgetsSubscription.ready()) { 
      // SharedWidgets should be available now... 
      console.log('widget count:' + SharedWidgets.find().count); 
      // clean up the interval... 
      Meteor.clearInterval(subIsReadyInterval); 
     } 
    }, 1000); 
}); 

如果有更好的設置這個方法,我很想知道。

0


我已經這樣做了,
檢查我的應用程序Tapmate或youtap.meteor.com在Android和iPhone,
我知道這將工作到0.6.4版本的流星,
沒有檢查,如果以上版本的作品上,

您必須手動覆蓋默認DDP URL連接時,
即去住,數據.meteor /包/實時數據包/ stream_client_socket.js

覆蓋此 - Meteor._DdpClientStream =函數(url){
url =「ddp + sockjs:// ddp-- * * -youtap.meteor。COM/sockjs「
現在你不會看到事情發生在本地,但它會指向從重裝

感謝

流星服務器
也禁止重載JS