【问题标题】:How to subscribe via DDP connections to other Meteor servers on the server side?如何通过 DDP 连接订阅服务器端的其他 Meteor 服务器?
【发布时间】:2015-04-25 01:06:30
【问题描述】:

我想在两个 Meteor 应用之间同步数据。因此,我在两个应用程序上发布了一个包含相关数据的集合(显然,它们运行相同的 Meteor 版本 0.8.1.2,具有完全相同的包)。

当我跑步时

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 提到这样的东西在客户端和服务器上都有效。查看 subscribe 的文档(http://docs.meteor.com/#meteor_subscribe)它说它只适用于客户端,这可以解释我的服务器上什么都没有发生,但有点奇怪,因为 DDP.connect(http://docs.meteor.com/#ddp_connect)似乎是为客户端和服务器,支持订阅。

那么我在这里错过了什么吗?如果订阅在这种情况下确实不起作用,那么在两台服务器之间获得类似订阅功能的最佳方法是什么? 我知道我可以使用自定义 Meteor.methods ,但与订阅的效果相比,这似乎有点像拐杖,所以我会对任何更好的解决方案非常感兴趣......

【问题讨论】:

  • 也许在回调中尝试newCollection.find() 进行订阅,以确保您在集合有数据之前没有查询它。我有点惊讶客户端上的集合不是空的,也不需要回调或等待。
  • 天哪,非常感谢!您的建议与使用 Meteor.setTimeout 或其他任何东西等待一段时间一样有效。也许在客户端 find() 总是等待集合 ready()?我不知道,但因为它对客户端有效,所以我不认为问题是这样的......
  • 奇怪的是当使用autopublish包时,回调中不需要.find()

标签: javascript meteor


【解决方案1】:

就像 user728291 指出的那样,问题是在这种情况下,服务器没有在另一端的发布函数中等待 this.ready(),因此当在服务器上调用 newCollection.find() 时,newCollection 仍然是空(但不久后会收到数据)。似乎在客户端 newCollection.find() 试图等待服务器发布功能的 this.ready() (我也完全不确定,也许它在客户端上工作的原因是完全不同的)因此在客户端上它当时不是空的。

无论如何,当您总是在 subscribe 的回调中触发 find() 时,您是安全的,这会将任何函数解释为 onReady 回调 (http://docs.meteor.com/#meteor_subscribe)。

所以保证在服务器和客户端上有效的是

var testConnection = DDP.connect('http://10.0.10.20:3003/');
var newCollection = new Meteor.Collection('remoteData', testConnection);
testConnection.subscribe('remoteData', function() {
    console.log('Data list starts here:');
    newCollection.find().forEach(function(data){console.log(data)});
});

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 2015-11-05
    • 2015-11-19
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2013-05-21
    • 2019-09-25
    相关资源
    最近更新 更多