Node.js后台任务

时间:2013-07-13 22:32:30

标签: node.js task

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

是否有人有此经验并可以推荐解决方案?

谢谢, 约翰

1 个答案:

答案 0 :(得分: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
});

如果您需要与订单无关的异步控制流程,请考虑使用promises(我推荐使用kriskowal的npm模块' q '。)在任务启动时创建一个promise,然后解析/拒绝它完成(在“关闭”事件处理程序中)将在后台作业完成后以干净且可预测的方式执行后续任务。