Node.js рабочие / фоновые процессы - PullRequest
27 голосов
/ 21 января 2011

Как я могу создавать и использовать фоновые задания в node.js?

Я сталкивался с двумя библиотеками (node-resque и node-worker), но хотел бы знать, есть ли что-то более используемое.

Ответы [ 2 ]

45 голосов
/ 24 января 2011

Я провел некоторые исследования по этому вопросу, и я бы сделал это следующим образом.

Настройка

beanstalkd

  1. Установка beanstalkd .Другая очередь сообщений, НО , эта поддерживает ЗАДЕРЖКА ПОСТАВЛЕНО .Если вы компилируете из исходного кода, это будет немного сложнее, потому что это зависит от libevent (например, memcached).Но опять же, я не думаю, что вы должны скомпилировать его из исходного кода, потому что есть много доступных бинарных пакетов .Например, в Ubuntu вы можете установить beanstalkd, введя команду:

    sudo apt-get install beanstalkd

node-beanstalk-client

Установить клиентскую библиотеку beanstalkd.Лучшим из найденных мной был node-beanstalk-client .Потому что в списке клиентских библиотек beanstalkd эта библиотека не упоминается / не упоминалась (опять же, я могу добавить записи в список, поэтому я добавлю эту).Причины, по которым я предпочитаю эту библиотеку перед другими:

  1. Пакет Npm : Мне понравилось использовать пакет npm для установки клиентской библиотеки.У других не было.
  2. Активная разработка : я предпочитаю библиотеки, которые имеют более поздние или более коммиты.

Поэтому установитьпосле установки npm ( способ записи ) вам нужно просто выполнить следующую команду:

npm install beanstalk_client

Код

потребитель.js

var client = require('beanstalk_client').Client;

client.connect('127.0.0.1:11300', function(err, conn) {
    var reserve = function() {
        conn.reserve(function(err, job_id, job_json) {
            console.log('got job: ' + job_id);
            console.log('got job data: ' + job_json);
            console.log('module name is ' + JSON.parse(job_json).data.name);
            conn.destroy(job_id, function(err) {
                console.log('destroyed job');
                reserve();
            });
        });
    }

    reserve();
});

Первый запуск потребителя:

node consumer.js 

Следующий запуск producer.js.Через пять секунд (указанная мной задержка) после того, как вы выполните producer.js, consumer.js обработает сообщение.

provider.js

var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn) {
    var job_data = {"data": {"name": "node-beanstalk-client"}};
    var priority = 0;
    var delay = 5;
    var timeToRun = 1;
    conn.put(priority, delay, timeToRun, JSON.stringify(job_data), function(err, job_id) {
        console.log('put job: ' + job_id);
        process.exit();
    });
});

, чтобы начать только выдачу:

node producer.js
13 голосов
/ 06 февраля 2013

Я использую Kue .

Kue - это многофункциональная приоритетная очередь заданий для node.js, поддерживаемая redis.Ключевой особенностью Kue является его чистый пользовательский интерфейс для просмотра и управления поставленными в очередь, активными, неудачными и завершенными заданиями.

...