使用节点ddp-client从节点插入meteor体中

我正在试图通过node.js将一些syslog数据stream到meteor集合中。 它工作的很好,但meteor客户端轮询周期约10秒对于我的口味来说太长了一个周期 – 我想是〜1秒。

通过控制台进行客户端收集插入的速度很快,所有客户端都会立即进行更新,因为它使用的是DDP。 但是从服务器端直接插入的MongoDB受到客户端的轮询周期的限制。

所以看来,现在我已经放弃使用DDP从我的节点守护进程插入更新。

在ddp-client包示例中,我可以看到我订阅的消息,但是我不明白如何通过DDP和node.js实际发送新消息到Meteor集合,从而更新所有客户端立刻…

任何例子或指导? 我将不胜感激 – 作为node和Meteor的新手,我很快就达到了极限。

根据这个截屏,可以简单地调用集合声明的meteor方法。 在你的情况下,代码将如下所示:

ddpclient.call('/counts/insert', [{hits: 1111}], function(err, result) { console.log('called function, result: ' + result); }) 

好吧,我仔细观察了一些代码,发现我完全是过度思考的东西。 协议实际上是相当简单的,RPC是什么东西。

我很高兴地报告说,它绝对解决了服务器端插入延迟(手动Mongo插入需要几秒钟来轮询/更新客户端)。

如果你通过DDP,你会得到所有你认识和喜欢meteor的实时(ISH)善良:)

为了后代,并希望帮助其他人去吸引有趣的用例,这里是设置。

用例

我正在将一些自定义syslog数据后台打包到一个node.js守护进程中。 这个守护进程然后parsing并将数据插入到Mongo中。 这个想法是为我的第一个Meteor实验提出一个基于浏览器的实时报告项目。

所有这些都运行良好,但是因为我在Meteor 之外插入Mongo,所以客户必须每10秒轮询一次。 在另一个SOpost@TimDogbuild议我看看这个DDP,他的build议看起来完美的工作。

我已经在我的系统上对它进行了testing,现在我可以通过node.jsasynchronous应用程序立即更新所有Meteor客户端。

设置这里的基本想法是使用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服务器插入,然后立即更新连接到我们的客户端:)

我敢肯定,我的代码以上不完美,所以请提出build议。 我对整个生态系统都很陌生,所以这里有很多机会学习。 但是我确实希望这能帮助一些人节省一些时间。 现在,回到专注于使我的模板与所有这些实时数据闪耀:)