后台任务与Meteor中的任何客户端无关

时间:2013-03-14 06:49:52

标签: meteor

我想在Meteor应用程序的后台运行一些与客户端无关的常规任务(比如抓一些页面)。所以他们不应该在任何客户端线程中,但一旦完成,我想用信息更新所有客户端。实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:6)

在服务器端代码上运行它们。如果经常你的意思是每天定时任务或其他事情:

您可以在Tom Coleman的cron包中使用cron作业:https://github.com/tmeasday/meteor-cron

您需要安装meteorite package manager firstnpm install meteorite -g,然后在项目目录mrt add cron-tick

中安装cron软件包

服务器js

var MyCron = new Cron();

// this job will happen every day (60 seconds * 60 * 24)
MyCron.addJob(60*60*24, function() {
    //Scrape your stuff

    //Update your collections
});

只要您运行更新/插入/编辑,它们就会被推送到所有客户端。

答案 1 :(得分:5)

要以允许任意外部进程更新Meteor客户端的方式执行此操作,请使用与Meteor关联的DDP协议。您的服务器进程可以写入DDP通道,当它们执行时,您的客户端将更新。看看这篇文章的示例和用例,可能与您的相似:

Using node ddp-client to insert into a meteor collection from Node

协议非常简单,帖子显示了一个node.js进程写入Mongo集合的示例,该集合实时更新客户端。

答案 2 :(得分:1)

您可以尝试在服务器上调用Meteor.setInterval(可能在Meteor.startup中)。这应该有效,尽管它可能不像cron解决方案那样灵活。

答案 3 :(得分:0)

Go to http://atmospherejs.com and search for cron

The best one I found is percolate:synced-cron

Installation

meteor add percolate:synced-cron

Basics

SyncedCron.add({
  name: 'Crunch some important numbers for the marketing department',
  schedule: function(parser) {
    // parser is a later.parse object
    return parser.text('every 2 hours');
  },
  job: function() {
    var numbersCrunched = CrushSomeNumbers();
    return numbersCrunched;
  }
});

SyncedCron.start();

Advanced

See their documentation