2012-08-09 20 views
7

Pracuję z node.js i chcę, gdy pojawi się żądanie na adres URL, np. ./calculate, rozpocznij nowy proces, aby wykonać te skomplikowane obliczenia, i chcę kontynuować ten proces, nawet jeśli skrypt, który ją wywołał, ukończył. Czy to możliwe?Rozpocznij nowy proces na nodejs

Dziękuję.

Odpowiedz

3

Można użyć dostarczonego natywnie siłownia procesu dziecko: http://nodejs.org/api/child_process.html

i użyj „UNIX” nohup polecenia, aby utrzymać zrodził proces żywy nawet jeśli proces rodzic zmarł.

+1

Mówiąc o wydajności, czy to dobra decyzja? Dziękujemy – Mario

+0

Czy chcesz, aby wynik działania procesu potomnego był zwracany w tym samym połączeniu, które je utworzyło? – Roman

+1

Możesz być sprytny i stworzyć pulę pracowników podrzędnych i komunikować się z nimi za pośrednictwem kolejki w bazie danych (powiedzmy, używając czegoś takiego jak Redis), co może być bardzo skalowalne i odporne. Kilka linków, które mogą Ci się przydać: 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

Istnieją różne podejścia do tego.

Można użyć https://github.com/pgriess/node-webworker.

Albo znacznie lepiej http://nodejs.org/docs/latest/api/cluster.html#cluster_cluster.

Rozwiązania te polegają na tym, że jeśli chcesz wykonać podproces w węźle, możesz również po prostu odrodzić nowy proces węzła i poczekać na wyjście (http://nodejs.org/api/all.html#all_child_process_spawn_command_args_options), ale węzeł -webworker jest opakowaniem tego rozwiązania i jest znacznie czystszy.

+0

Ale nie muszę czekać w ogóle. Chcę wywołać podproces, a nie więcej. Chodzi mi o to, że jeśli główny skrypt zginie lub skończy się serwer http, chcę kontynuować podproces. Dziękuję Ci. – Mario

1

Po twoim ostatnim komentarzu wiem, że rozumiem lepiej, co chcesz robić.

Chcesz odrodzić proces, a nie proces potomny. Najlepszym i czystszym sposobem na zrobienie tego jest użycie jakiegoś demoniziera do ich uruchomienia.

spojrzeć na zawsze:
https://github.com/nodejitsu/forever
https://github.com/nodejitsu/forever-monitor

To może być doskonałym narzędziem dla Ciebie. Nigdy go nie używałem programowo programowalnie, tylko cli. Ale właśnie to zajrzę.

+0

Dziękuję bardzo, ale uważam, że nandem jest dobry dla mnie;) – Mario

+1

czasami prostota jest wystarczająco dobra: D – 3on

Powiązane problemy