转发服务器端DDP连接集合到客户端

时间:2013-08-27 09:14:08

标签: meteor

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

     BACKEND
     /     \
   APP1     APP2
     |       |
  CLIENT   CLIENT

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

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

这一切看起来都很顺利。唯一的问题是,在app server无法查询服务器端的任何集合,所有的find()响应都是空的,在客户端(浏览器)中,它都可以正常工作。

它完全适用或者你建议我应该如何设置它只是巧合。

由于

2 个答案:

答案 0 :(得分: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');
server / 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);
});

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

答案 1 :(得分:0)


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

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

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

谢谢你