2
我有一個應用程序,其中有一部分計算密集型。我想將這個計算關閉到後臺任務,並在完成時通知主Node.js線程。我看到了一些可能的解決方案,包括Node Background Task,ClusterHub,Node Threads A-Go-Go,我確信還有其他解決方案。Node.js後臺任務
有沒有人有這方面的經驗,可以推薦一個解決方案?
感謝, 約翰
我有一個應用程序,其中有一部分計算密集型。我想將這個計算關閉到後臺任務,並在完成時通知主Node.js線程。我看到了一些可能的解決方案,包括Node Background Task,ClusterHub,Node Threads A-Go-Go,我確信還有其他解決方案。Node.js後臺任務
有沒有人有這方面的經驗,可以推薦一個解決方案?
感謝, 約翰
過程是很簡單,這是不值得的麻煩與庫或NPM模塊來包裝它們,除非你有特殊的功能,比如後臺守護進程自動重生。內置的節點API「child_process」處理過程,並使用它很簡單:
var childProcess = require("child_process");
var child = childProcess.spawn("/usr/bin/uname", ["-a"]);
child.stdout.setEncoding("utf8");
child.stderr.setEncoding("utf8");
var stdoutBuffer = "", stderrBuffer = "";
child.stdout.on("data", function(data){stdoutBuffer += data;});
child.stderr.on("data", function(data){stderrBuffer += data;});
child.on("close", function(code)
{
//the process exited with code `code`
console.log("Stdout:", stdoutBuffer);
process.exit(code); //bubble up the exit code
});
如果您需要訂單無關的異步控制流,可以考慮使用承諾(我建議故宮模塊「q '由kriskowal創建。)當你的任務開始時創建一個承諾,並在完成時(在「關閉」事件處理程序中解析/拒絕它)將爲完成後臺任務後執行後續任務提供一種乾淨而可預測的方式。
值得注意的是,如果您要產卵的過程是另一個節點腳本,則可能需要使用child_process.fork()而不是spawn()。他們基本上做同樣的事情,但fork()會自動爲子進程設置一個通信通道,用於將數據發送回父進程。 –