我想在Meteor应用程序的后台运行一些与客户端无关的常规任务(比如抓一些页面)。所以他们不应该在任何客户端线程中,但一旦完成,我想用信息更新所有客户端。实现这一目标的最佳方法是什么?
答案 0 :(得分:6)
在服务器端代码上运行它们。如果经常你的意思是每天定时任务或其他事情:
您可以在Tom Coleman的cron包中使用cron作业:https://github.com/tmeasday/meteor-cron。
您需要安装meteorite package manager first:npm install meteorite -g
,然后在项目目录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
});
只要您运行更新/插入/编辑,它们就会被推送到所有客户端。
答案 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