我有后端流星服务器,它在多个应用程序中提供和共享公共集合(仅仅共享mongo db是不够的,需要实时更新)。
BACKEND
/ \
APP1 APP2
| |
CLIENT CLIENT
我在后端服务器和应用服务器之间运行服务器到服务器的DDP连接。
Atm我只是在从后端服务器订阅后重新发布应用服务器中的集合。
这一切看起来都很顺利。唯一的问题是,在app server无法查询服务器端的任何集合,所有的find()响应都是空的,在客户端(浏览器)中,它都可以正常工作。
它完全适用或者你建议我应该如何设置它只是巧合。
由于
答案 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重新加载
谢谢你