Node.js 后台任务

标签 node.js task

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

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

谢谢, 约翰

最佳答案

进程非常简单,不值得用库或 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,并在任务启动时解析/拒绝它完成(在“关闭”事件处理程序中)将在后台作业完成后以一种干净且可预测的方式执行后续任务。

关于Node.js 后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17634798/

相关文章:

Javascript 对象不附加新属性

javascript - 嵌套 promise Node js

python - Windows 任务计划程序,python 脚本,代码 2147942401

c# - 在c#中将消息从子任务传递到父任务

gradle - 将Gradle任务标记为 “failed”

node.js - Mongoose findOneAndUpdate 不会更新我的数据库

node.js - 如何通过 Websocket 发送文件以及附加信息?

node.js - Mongoose 文档保存失败, "TypeError: Cannot read property ' 选项未定义”

c# - 在创建调度服务方面需要帮助

Azure 任务计划程序