2012-08-09 31 views
7

Tôi đang làm việc với node.js và tôi muốn khi có yêu cầu url như ./calculate bắt đầu một quy trình mới để thực hiện các phép tính phức tạp này và tôi muốn quá trình đó tiếp tục ngay cả khi kịch bản được gọi là nó đã kết thúc. Có thể không?Bắt đầu quá trình mới trên nút js

Cảm ơn bạn.

Trả lời

3

Bạn có thể sử dụng các thiết bị quá trình con natively cung cấp: http://nodejs.org/api/child_process.html

Và sử dụng unix "nohup" lệnh để giữ cho quá trình sinh ra sống ngay cả khi quá trình cha mẹ qua đời.

+1

Nói về hiệu suất, đó có phải là một quyết định tốt không? Cảm ơn bạn – Mario

+0

Bạn đang tìm kiếm kết quả của quá trình con làm việc để được trả lại trong cùng một kết nối tạo ra nó? – Roman

+1

Bạn có thể thông minh về nó và tạo ra một nhóm các công nhân trẻ em và giao tiếp với họ thông qua một hàng đợi trong cơ sở dữ liệu (nói bằng cách sử dụng một cái gì đó như Redis), điều này có thể rất mở rộng và đàn hồi. Một vài liên kết mà bạn có thể thấy hữu ích: 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

Có cách tiếp cận khác với điều này.

Bạn có thể sử dụng https://github.com/pgriess/node-webworker.

Hoặc tốt hơn nhiều http://nodejs.org/docs/latest/api/cluster.html#cluster_cluster.

Các giải pháp đó là nếu bạn muốn thực hiện quy trình con trong Node, bạn cũng có thể đơn giản sinh ra một quy trình Node mới và đợi đầu ra (http://nodejs.org/api/all.html#all_child_process_spawn_command_args_options) nhưng nút -webworker là một wrapper xung quanh giải pháp đó và là một sạch hơn nhiều.

+0

Nhưng tôi không chờ chút nào. Tôi muốn gọi quy trình con và không phải là quá nhiều. Ý tôi là, nếu kịch bản chính bị chết hoặc máy chủ http kết thúc, tôi muốn tiến trình con tiếp tục. Cảm ơn bạn. – Mario

1

Vì vậy, sau bình luận cuối cùng của bạn, tôi biết hiểu rõ hơn những gì bạn muốn làm.

Bạn muốn sinh ra quy trình không phải là quá trình con. Cách tốt nhất và sạch hơn để làm điều này là sử dụng một số loại demonizier để chạy chúng.

Có một cái nhìn tại mãi mãi:
https://github.com/nodejitsu/forever
https://github.com/nodejitsu/forever-monitor

Đây có thể là công cụ hoàn hảo dành cho bạn. Tôi chưa bao giờ sử dụng nó theo chương trình, chỉ cần bấm. Nhưng đây là những gì tôi muốn xem xét.

+0

Cảm ơn bạn rất nhiều nhưng tôi thấy rằng các comand nohup là tốt cho tôi;) – Mario

+1

đôi khi đơn giản là đủ tốt: D – 3on

Các vấn đề liên quan