1

我有后端流星服务器,它跨多个应用程序服务和共享公共集合(仅共享 mongo db 是不够的,需要实时更新)。

     BACKEND
     /     \
   APP1     APP2
     |       |
  CLIENT   CLIENT

我在后端服务器和应用服务器之间运行服务器到服务器 DDP 连接。

Atm 我只是在从后端服务器订阅它们后重新发布应用服务器中的集合。

这一切似乎运作良好。唯一的问题是,在应用程序服务器中无法查询服务器端的任何集合,所有 find() 响应都是空的,在客户端(浏览器)中一切正常。

它只是一个巧合,还是你建议我应该如何设置它。

谢谢

4

2 回答 2

2

我意识到这是一个很老的问题,但我想我会分享我的解决方案。我有一个类似的问题,因为我有两个应用程序(App1 和 App2)将与第三个应用程序(App3)共享数据。

我无法弄清楚为什么我的 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);
});

如果有更好的方法来设置它,我很想知道。

于 2014-01-16T21:08:05.460 回答
0


我已经这样做了,
检查我的应用程序 Tapmate 或 youtap.meteor.com 在 android 和 iphone 上,
我知道它可以工作到 0.6.4 流星版本,
还没有检查是否适用于以上版本,

您必须在连接时手动覆盖默认的 ddp url,
即转到 .meteor/packages/live-data/stream_client_socket.js 中的实时数据包

覆盖这个 - Meteor._DdpClientStream = function (url) {
url = "ddp+sockjs://ddp-- * *-youtap.meteor.com/sockjs";
现在你不会看到本地发生的事情,但它会指向流星服务器
也禁用重新加载重新加载 js

谢谢

于 2014-01-17T04:29:47.867 回答