我想在 Meteor 应用程序的后台运行一些独立于客户端的常规任务(比如抓取一些页面)。所以它们不应该在任何客户端线程中,但是一旦它们完成,我想用信息更新所有客户端。实现这一目标的最佳方法是什么?
4 回答
在您的服务器端代码上运行它们。如果你的意思是每天定时任务或其他东西:
您可以将 cron 作业与 Tom Coleman 的 cron 包一起使用:https ://github.com/tmeasday/meteor-cron 。
您需要先安装陨石包管理器:npm install meteorite -g
然后在项目目录中安装 cron 包mrt add cron-tick
服务器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
});
一旦您运行更新/插入/编辑,它们就会被推送到所有客户端。
要以允许任意外部进程更新 Meteor 客户端的方式执行此操作,请使用与 Meteor 关联的 DDP 协议。您的服务器进程可以写入 DDP 通道,并且当他们这样做时,您的客户端将更新。查看这篇文章的示例和用例,可能与您的类似:
该协议相当简单,该帖子显示了一个 node.js 进程写入实时更新客户端的 Mongo 集合的示例。
您可以尝试在服务器上调用 a Meteor.setInterval
(可能在 中Meteor.startup
)。这应该可行,尽管它可能不如 cron 解决方案灵活。
转到http://atmospherejs.com并搜索cron
我发现最好的一个是percolate:synced-cron
安装
meteor add percolate:synced-cron
基本
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();
先进的