2012-08-09 14 views
7

Sto lavorando con node.js e voglio quando c'è una richiesta a un url come ./calculate avvia un nuovo processo per fare questi calcoli complessi, e voglio che quel processo continui anche se lo script che lo ha chiamato è finito. È possibile?Avvia nuovo processo su nodejs

Grazie.

risposta

3

È possibile utilizzare l'impianto processo figlio nativamente fornito: http://nodejs.org/api/child_process.html

E utilizzare UNIX "nohup" il comando per mantenere in vita anche se il processo padre è morto il processo generato.

+1

Parlando di prestazioni, è una buona decisione? Grazie – Mario

+0

Stai cercando il risultato del processo figlio da restituire nella stessa connessione che lo ha creato? – Roman

+1

Puoi essere intelligente e creare un pool di child worker e comunicare con loro attraverso una coda nel database (ad esempio usando qualcosa come Redis), questo può essere molto scalabile e resiliente. Pochi collegamenti che potresti trovare utili: 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

Ci sono diversi approcci a questo.

È possibile utilizzare https://github.com/pgriess/node-webworker.

O molto meglio http://nodejs.org/docs/latest/api/cluster.html#cluster_cluster.

Queste soluzioni sono se si desidera eseguire un sottoprocesso nel nodo, si potrebbe anche semplicemente generare un nuovo processo di nodo e attendere l'output (http://nodejs.org/api/all.html#all_child_process_spawn_command_args_options) ma nodo -webworker è un involucro attorno a questa soluzione ed è molto più pulito.

+0

Ma non devo assolutamente aspettare. Voglio chiamare il sottoprocesso e non di più. Voglio dire, se lo script principale muore o finisce il server http, voglio che il sottoprocesso continui. Grazie. – Mario

1

Quindi dopo il tuo ultimo commento so capire meglio cosa vuoi fare.

Si desidera generare il processo non processo figlio. Il modo migliore e più pulito per farlo è usare un qualche tipo di demonizier per eseguirli.

Dai un'occhiata alla sempre:
https://github.com/nodejitsu/forever
https://github.com/nodejitsu/forever-monitor

Questo potrebbe essere lo strumento perfetto per voi. Non l'ho mai usato programmaticamente, solo cli. Ma questo è quello che guarderei.

+0

Grazie mille ma trovo che il comando nohup mi faccia bene;) – Mario

+1

a volte la semplicità è abbastanza buona: D – 3on

Problemi correlati