在Meteor中定期运行后台任务

时间:2016-01-19 06:02:14

标签: node.js mongodb meteor background-process

假设我有一个显示城市及其温度的小型流星应用程序。这些城市保存在数据库中。

我想要一个服务器非阻塞过程,它会定期拉动网页并解析温度,例如每小时一次,以更新数据库中的值。

我假设一旦新值更新,所有连接的用户都会看到更新后的温度,甚至无需刷新页面。

我如何以流星初学者的身份实现这一目标。这个过程应该独立于用户,它应该每小时运行一次,无论页面上是否有用户。

谢谢!

3 个答案:

答案 0 :(得分:3)

使用percolate:synced-cron包创建一个cron作业。在服务器上运行。它可以安排使用momentjs以任何周期运行。

答案 1 :(得分:1)

我个人使用meteor-job-collection来执行此操作。我刚刚从我的项目中提取了一些代码,这将为您提供一个良好的起点。只需在服务器代码中包含此文件,然后将解析代码添加到作业中:

const parse_RATE = 1000 * 60 * 60;
const parseQueue = JobCollection('parseQueue');

parseQueue.processJobs('parse', { pollInterval: parse_RATE }, function(job, cb) {

   // Parse your web page

   <add your code here>

   // Signal that the job's done

   job.done();

   // Since .done() will create a new repeating job, we can now delete
   // this old job so that we don't fill up the database with dead ones.

   job.remove();
   cb();

});

// Remove any old jobs that were set up when the server was last running

const oldJobs = parseQueue.find();
oldJobs.forEach((job) => {
   parseQueue.cancelJobs([job._id]);
   parseQueue.removeJobs([job._id]);
});

// Create a new parse job
//
// We parse at 4am every day when the server is the least busy.

parseQueue.startJobServer();

const job = new Job(parseQueue, 'parse', {});
job.priority('normal')
   .repeat({ schedule: parseQueue.later.parse.recur().every(1).hour() })
   .save();

答案 2 :(得分:0)

您还可以使用我的新Steve Jobs软件包。对流星的做事方式非常友好。