Подтвердить что ты не робот

Фоновые задачи, не связанные с каким-либо клиентом в Meteor

Я хотел бы запустить некоторые независимые от клиента обычные задачи на фоне приложения Meteor (например, соскабливание некоторых страниц). Поэтому они не должны находиться внутри какого-либо клиентского потока, но как только они заканчиваются, я хотел бы обновить все клиенты информацией. Каков наилучший способ достичь этого?

4b9b3361

Ответ 1

Чтобы сделать это таким образом, чтобы произвольные внешние процессы обновляли клиенты Meteor, используйте протокол DDP, связанный с Meteor. Процессы вашего сервера могут записываться на канал DDP, и когда они будут обновляться вашими клиентами. Взгляните на это сообщение для примера и прецедента, который может быть похож на ваш:

Использование node ddp-client для вставки в коллекцию метеор из Node

Протокол довольно прямолинейный, и сообщение показывает пример записи процесса node.js в коллекцию Mongo, которая обновляет клиентов в реальном времени.

Ответ 2

Запустите их на своем серверном коде. Если по регулярности вы имеете в виду заданные задачи каждый день или что-то еще:

Вы можете использовать работу cron с пакетом cron Tom Coleman: https://github.com/tmeasday/meteor-cron.

Вам нужно сначала установить менеджер пакетов метеорита: npm install meteorite -g, а затем установить пакет cron в проект dir 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
});

Как только вы запустите свое обновление/вставку/редактирование, они будут перенаправлены всем клиентам.

Ответ 3

Вы можете попробовать называть Meteor.setInterval на сервере (возможно, в Meteor.startup). Это должно работать, хотя это может быть не так гибко, как решение cron.

Ответ 4

Перейдите в 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();

Дополнительно

См. их документацию