2012-08-09 13 views
7

Estoy trabajando con node.js y quiero cuando haya una solicitud para una url como ./calculate comience un nuevo proceso para hacer estos cálculos complejos, y quiero que ese proceso continúe incluso si el guión que lo llamó ha terminado. ¿Es posible?Comenzar un nuevo proceso en nodejs

Gracias.

Respuesta

3

Puede utilizar el servicio de proceso hijo proporcionado de forma nativa: http://nodejs.org/api/child_process.html

Y utilizar el Unix "nohup" comando para mantener el proceso generado con vida, incluso si el proceso padre murió.

+1

Hablando de rendimiento, ¿es una buena decisión? Gracias – Mario

+0

¿Está buscando el resultado del trabajo del proceso secundario que se devolverá en la misma conexión que lo creó? – Roman

+1

Puede ser inteligente al respecto y crear un grupo de niños trabajadores y comunicarse con ellos a través de una cola en la base de datos (digamos usando algo como Redis), esto puede ser muy escalable y resistente. Algunos enlaces que pueden serle útiles: http://stackoverflow.com/questions/5630208/nodejs-child-processes-exec-can-not-return-nohup-command http://stackoverflow.com/questions/ 4762016/node-js-workers-background-processes – Roman

3

Hay diferentes enfoques para esto.

Puede usar https://github.com/pgriess/node-webworker.

O mucho mejor http://nodejs.org/docs/latest/api/cluster.html#cluster_cluster.

Esas soluciones son si desea hacer un subproceso en Nodo, también podría generar un nuevo proceso de Nodo y esperar la salida (http://nodejs.org/api/all.html#all_child_process_spawn_command_args_options) pero el nodo -webworker es un envoltorio alrededor de esa solución y es mucho más limpio.

+0

Pero no tengo que esperar nada. Quiero llamar al subproceso y no más. Quiero decir, si el script principal se muere o el servidor http finaliza, quiero que el subproceso continúe. Gracias. – Mario

1

Así que después de su último comentario sé que entiendo mejor lo que quiere hacer.

Quiere generar proceso no proceso hijo. La mejor y más limpia forma de hacerlo es utilizar algún tipo de demonizier para ejecutarlos.

Tener un vistazo a siempre:
https://github.com/nodejitsu/forever
https://github.com/nodejitsu/forever-monitor

Esta podría ser la herramienta perfecta para usted. Nunca lo he usado programáticamente, solo cli. Pero esto es lo que buscaría.

+0

Muchas gracias pero me parece que el comand nohup es bueno para mí;) – Mario

+1

a veces la simplicidad es suficiente: D – 3on

Cuestiones relacionadas