2

我有一个应用程序,其中有一部分是计算密集型的。我想将该计算移至后台任务,并让它在完成时通知主 Node.js 线程。我看到了许多可能的解决方案,包括Node Background Task、 ClusterHub 、Node Threads A-Go-Go,我相信还有其他的。

有没有人有这方面的经验并可以推荐一个解决方案?

谢谢,约翰

4

1 回答 1

0

进程非常简单,除非您需要特殊功能,例如后台守护进程的自动重生,否则不值得用库或 npm 模块来包装它们。内置的 Node 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
});

如果您需要与顺序无关的异步控制流,请考虑使用 Promise(我推荐kriskowal的 npm 模块 ' q '。)在任务开始时创建一个 Promise,并在完成时解决/拒绝它(在“关闭”事件处理程序中)将在后台工作完成后提供一种干净且可预测的方式来执行后续任务。

于 2013-07-14T02:04:57.950 回答