我正在尝试通过node.js将一些系统日志数据流式传输到Meteor集合中。它工作得很好,但是Meteor客户端轮询周期大约10秒对我来说太长了--我希望它是~1秒。
通过控制台的客户端收集插入速度很快,所有客户端都会即时更新,因为它使用的是DDP。但是来自服务器端的直接MongoDB插入受制于客户端的轮询周期。
因此,现在看来,我只能使用DDP从我的节点守护进程插入更新。
在ddp-client包示例中,我能够看到我订阅的消息,但我不知道如何通过DDP和node.js将新的消息发送到Meteor集合,从而一次更新所有客户端...
有什么例子或指导吗?我非常感谢它--作为node和Meteor的新手,我很快就达到了极限。
发布于 2013-09-14 19:00:32
根据this screencast的说法,可以简单地调用集合声明的meteor-method。在您的示例中,代码将如下所示:
ddpclient.call('/counts/insert', [{hits: 1111}], function(err, result) {
console.log('called function, result: ' + result);
})
发布于 2013-02-02 04:46:30
好的,在仔细研究了一些代码后,我意识到我完全是想得太多了,所以我让它工作了。协议实际上是非常简单的,RPC之类的东西。
我很高兴地报告,它完全解决了服务器端插入延迟(手动Mongo插入需要几秒钟才能轮询/更新客户端)。
如果你通过DDP,你会得到你对Meteor所了解和喜爱的所有实时(差不多)的好处:)
为了子孙后代,也希望能帮助其他人找到有趣的用例,这里是设置。
用例
我正在将一些自定义syslog数据假脱机到一个node.js守护进程中。然后这个守护进程解析数据并将其插入到Mongo中。我的想法是为我的第一个Meteor实验提出一个基于浏览器的实时报告项目。
所有这些都运行得很好,但是因为我是在 of Meteor proper之外的Mongo 中插入的,所以客户端必须每隔10秒轮询一次。在另一篇@TimDog suggested的帖子中,我在这方面研究了DDP,他的建议看起来非常有效。
我已经在我的系统上测试过了,现在我可以通过node.js异步应用程序即时更新所有流星客户端。
设置调用这里的基本思想是使用DDP“”方法。它接受一个参数列表。在Meteor服务器端,您导出一个Meteor方法来使用它们并执行MongoDB插入。它实际上非常简单:
第1步: npm安装ddp
步骤2:转到您的Meteor服务器代码,在Meteor.methods中执行以下操作:
Meteor.methods({
'push': function(k,v) { // k,v will be passed in from the DDP client.
console.log("got a push request")
var d = {};
d[k] = parseInt(v);
Counts.insert(d, function(err,result){ // Now, simply use your Collection object to insert.
if(!err){
return result
}else{
return(err)
}
});
}
});
现在我们需要做的就是使用客户端库从我们的node.js服务器调用这个远程方法。这是一个示例调用,本质上是对example.js调用的直接复制,对我们刚刚导出的新“push”方法进行了一些调整:
ddpclient.call('push', ['hits', '1111'], function(err, result) {
console.log('called function, result: ' + result);
})
运行此代码将通过Meteor服务器插入内容,而Meteor服务器会立即更新连接到我们的客户端:)
我确信我上面的代码并不完美,所以请加入我的建议。我对整个生态系统都很陌生,所以在这里有很多学习的机会。但我真的希望这能帮一些人节省一点时间。现在,回到重点,让我的模板与所有这些实时数据闪耀:)
https://stackoverflow.com/questions/14639700
复制相似问题