2015-06-09 5 views
0

Возможно ли создать длинный процесс в NodeJs для обработки многих фоновых операций без прерывания основного потока; что-то вроде Сельдерея в Питоне.Возможно ли создать долговременный процесс в NodeJs

Подсказка. Очень желательно иметь возможность управлять этим долговременным процессом в случае отказа или перезапуска вдали от основного процесса.

ответ

2

http://nodejs.org/api/child_process.html - это правильный API для создания длительных процессов, у вас будет полный контроль над дочерними процессами (доступ к stdin/out/err, отправка сигналов и т. Д.). Однако этот подход требует, чтобы ваш процесс узла был родительским для этих детей. . Если вы хотите, чтобы ребенок пережил родителя, взгляните на options.detached во время создания ребенка (и следуйте child.unref()).

Обратите внимание, однако, что Node.js подходит очень хорошо, чтобы избежать такой архитектуры. Обычно node.js выполняет весь фоновый материал в основном потоке. Я пишу приложения с большим количеством трафика (например, тысячи запросов в секунду), при этом DB, Redis и RabbitMQ получают доступ ко всем из основного потока и без каких-либо дочерних процессов - и он работал нормально, как и должно быть, благодаря событию Node IO.

Я обычно использую child_process api только для запуска отдельных исполняемых файлов (например, ffmpeg для перекодирования некоторого видеофайла), кроме таких сценариев отдельные процессы, вероятно, не то, что вы хотите.

Существует также кластер api, который позволяет одному хозяину обрабатывать многочисленные рабочие процессы, хотя я думаю, что это не то, что вы ищете.

+0

Отличный ответ @Nopik. Но моя главная забота здесь о дочерних процессах заключается в том, что если родительский процесс умирает, он будет уничтожать ребенка с ним, я хочу убедиться, что этого не произойдет, возможно ли это? Кроме того, вы можете предоставить ссылку для узла api api и несколько вариантов использования. Оценил! – securecurve

+0

https://nodejs.org/api/cluster.html – Nopik

+0

Я также отредактировал свой ответ, чтобы предоставить информацию о ребенке, переживающем родителя. – Nopik

1

Вы можете создать дочерний процесс для обработки фоновых операций. Затем используйте сообщения для передачи данных между новым процессом и основным потоком.

http://nodejs.org/api/child_process.html

Update

Похоже, вам нужно использовать очереди сервера, вроде beanstalkd http://kr.github.io/beanstalkd/https://www.npmjs.com/package/fivebeans +.

+0

Большое спасибо @stdob, я только что обновил свой вопрос, можете ли вы, пожалуйста, посмотреть. – securecurve

+1

Вы можете обрабатывать различные типы событий, такие как «ошибка» или «выход»: https://nodejs.org/api/child_process.html#child_process_event_error Или отправить сигнал «убить», а после перезапуска дочерний процесс из основного Процесс: https://nodejs.org/api/child_process.html#child_process_child_kill_signal –

+0

Спасибо, что обратились к Beanstalk – securecurve

Смежные вопросы