如何通过DDP连接订阅到服务器端的其他Meteor服务器
How to subscribe via DDP connections to other Meteor servers on the server side?
我想同步两个流星应用程序之间的数据。因此,我在两个应用程序(显然运行相同的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提到这样的东西在客户端和服务器上工作。在文档中查找订阅(http://docs.meteor.com/#meteor_subscribe),它说它只适用于客户端,这将解释在我的服务器上没有发生任何事情,但会有点奇怪的DDP。Connect (http://docs.meteor.com/#ddp_connect)似乎是指客户端和服务器,并支持订阅。
我错过什么了吗?如果订阅在此场景中确实不起作用,那么在两台服务器之间获得类似订阅功能的最佳方法是什么?我知道我可以用定制的流星。方法,但这似乎有点像拐杖相比如何很好地与订阅工作,所以我将非常感兴趣的任何更好的解决方案…
就像user728291指出的那样,问题是服务器在这种情况下没有在另一边的发布函数中等待this.ready(),因此当在服务器上调用newCollection.find()时,newCollection仍然是空的(但不久之后将接收数据)。似乎在客户端上,newCollection.find()试图等待服务器发布函数的this.ready()(我也绝对不确定这一点,也许它在客户端上工作的原因是完全不同的),因此在客户端上它当时不是空的。
无论如何,当你总是在订阅的回调中触发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)});
});
- 如何使用skip参数使用angular ui引导进行服务器端分页
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何轻松地将服务器端变量从Java代码转移到客户端代码
- 通过ajax将坐标传递到php服务器端,并在处理后检索到javascript
- 将表单数据提交到服务器端
- 使用ajax的服务器端分页&jQuery
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 使用FormData上传AJAX图像;t在服务器端显示图像
- React路由器服务器端渲染和ajax获取数据
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- Meteor如何运行服务器端python脚本
- CORS-服务器端cookie没有保存在chrome浏览器上
- Riot js 使用其他库,如带有服务器端渲染的 jquery
- 从服务器端操作脚本或其他内容调用PowerShell脚本
- 在没有
- 我应该如何在服务器端存储来自JS的时间戳,以便我可以可靠地使用它转换为其他时区?
- 如何通过DDP连接订阅到服务器端的其他Meteor服务器
- 使用eval()的数据从服务器端安全吗?(如果没有,请提供其他选择)