node.js - 针对 Heroku 和 node.js 上的每个请求运行的后台作业

标签 node.js heroku express web-worker

我有一个应用程序需要运行很长的过程(每个请求需要 30-60 秒)。处理后,将结果作为响应返回给请求。这在本地运行良好,但它使我的 Heroku 实例崩溃。

我希望发生的是:

  • 用户来到现场,请求发送到后端
  • 后端立即返回,并启动另一个进行处理的进程/任务/作业
  • 当处理结束时,响应返回给正确的用户。

我不确定为此需要什么。基于一个小时的研究,我似乎可以将 Redis 用作队列,并且工作人员可以每 x 分钟轮询一次。但我无法理解的是如何在处理结束后找出将响应发送到哪个请求。

是否有用于此的示例 Express/node.js?任何指示都是有帮助的。

最佳答案

正如您在研究中发现的那样,使用 Redis 设置工作队列是长期运行进程的好方法。一个不错的图书馆是 kue (https://github.com/learnboost/kue) .

当涉及到用工作结果响应请求时,让一个超常的请求挂起等待响应并不是一个好的方法(并且可能不起作用,heroku 会杀死已经闲置的请求一定时期)。

您可以做的是在发出请求时启动后台作业并立即使用作业 ID 响应请求。然后,客户端可以轮询服务器以获取作业的状态,当作业完成时,它可以获取所需的结果。

关于node.js - 针对 Heroku 和 node.js 上的每个请求运行的后台作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002110/

相关文章:

bash - cp : target is not a directory

node.js - 为什么 mongoose.model.create 的回调不是从 Express 3.x HTTP 请求处理程序中执行(实际上 connect-mongodb 是原因)

json - 没有通过 npm 请求包获得完整的正文

node.js - 删除特定的 getstream feed

git - 执行 git reset --hard head 后如何恢复我的提交?

node.js - Express 和 Node.js 超时

node.js - Expressjs 或 Koajs 中静态文件的相对路径

node.js - 如何使用 Node.js Express 模块化路由

javascript - 类型错误 : object is not a function in node Js

ruby-on-rails - 仅在生产中发生错误时如何调试 Rails 应用程序?