觀察員工作者職能

如果 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