node.js - 如何构建 Node 应用程序来处理 cpu 密集型任务?

标签 node.js

我了解到应该将 CPU 密集型任务从服务器中移出,服务器应该负责与客户端通信并快速响应,而不是真正用于发送批量电子邮件,或者以特定质量计算数据库中的用户或调整图像大小等。

所以没有这样做我怎么能让我的 nodejs 保持联系并控制 nodejs 代码之外的进程。

例如,

用户上传一百万行的大 csv 文件。

我想分析一下然后返回

我可以让用户等待 nodejs 分析并返回结果。

有效但无法扩展,如果有 3000 个用户,事件循环的所有优势都将消失。

那么我该如何处理呢。

我读到我应该让其他外部进程来处理这个,怎么办?这些过程可以用更好更快的语言编写吗?如果我想将进度流式传输到客户端 (30%) 怎么办,这将需要进程和 nodejs 之间的通信。

如果我能解决这个问题,我认为 GO 和 Nodejs 是最好的组合。

最佳答案

在 Node 中,如果你需要执行 CPU 密集型工作,你应该使用 child_process .这将使主要流程保持空闲,以便在分析您的 CSV 时继续处理请求和响应客户。

当然,对于 3000 个用户,您不希望生成 3000 个单独的进程,因为这不会扩展,因此在构建 Node 应用程序时,设计如何控制/创建您的子进程应该是所有考虑因素。

如果您想报告进度,您可以使用父进程和子进程之间的消息来通过 child.send() 传达 CSV 分析的状态。 (父对子通信)和 process.send()(子对父通信)。 See this example来自用于在父进程和子进程之间进行通信的 Node 文档。

关于node.js - 如何构建 Node 应用程序来处理 cpu 密集型任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37623924/

相关文章:

node.js - WebStorm/grunt 调试运行抛出 EADDRINUSE 错误

javascript - 为什么在expressjs中app.use中间件之后app.get中间件不起作用

node.js - Node.js 中 OpenSSL base64 enc 的等效项 (openssl enc -base64 -d -A)?

node.js - [yargs] 中的命令和选项有什么区别

javascript - Node 脚本引用错误: fs is not defined error in test script

javascript - 类型错误 : Object #<ServerResponse> has no method 'send'

node.js - 我在nodejs中有一个自签名证书。当我添加证书 key 并尝试运行它时, Node 给出如下所示的错误

javascript - 在 Node.js 中使用 Selectize

node.js - 使用 docker 时,npm 库不工作

javascript - MySQL 查询由于某种原因未执行