觀察員工作者職能
如果 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