19

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

4

4 回答 4

6

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

您可以将 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
});

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

于 2013-03-14T08:39:00.940 回答
5

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

使用节点 ddp-client 从节点插入流星集合

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

于 2013-05-04T13:06:01.470 回答
1

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

于 2013-04-09T09:04:26.797 回答
0

转到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();

先进的

查看他们的文档

于 2015-07-31T20:33:02.460 回答