观察员工作者职能
如果 Node 事件循环就像一个自行车链,服务器端集合观察器就像一个变速器。当数据进入时,它将成为一种齿轮机构。它可以非常高效,因为所有的匹配自行车都有变速器。但它也是打破整个系统的源泉。这是一种高速反应功能,可以炸毁你。被警告。
Meteor.startup(function(){
console.log('starting worker....');
var dataCursor = Posts.find({viewsCount: {$exists: true}},{limit:20});
var handle = dataCursor.observeChanges({
added: function (id, record) {
if(record.viewsCount > 10){
// run some statistics
calculateStatistics();
// or update a value
Posts.update({_id: id}, {$set:{
popular: true
}});
}
},
removed: function () {
console.log("Lost one.");
}
});
});
请注意,20 的限制是变速器的大小……它有多少齿; 或者更具体地说,当光标在集合上行走时,光标中有多少项。在这种功能中使用’var’关键字时要小心。尽可能少地将对象写入内存,并专注于添加的方法内的对象重用。当打开 opslog,并且这个东西全速运行时,如果它将对象写入内存堆的速度比 Node 垃圾收集器能够清理的速度快,那么它就是暴露令人讨厌的内存泄漏的主要候选者。
上述解决方案不能横向扩展,因为每个 Meteor 实例都会尝试更新相同的记录。因此,为了横向扩展,需要某种环境检测。
有关在群集中的多台计算机上同步服务工作者的绝佳示例,请参阅 percolatestudios:synced-cron
软件包。
流星同步 -的 cron