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

时间:2014-09-23 18:21:42

标签: node.js heroku express web-worker

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

我想要发生的是:

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

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

是否有Express / node.js样本?任何指针都有帮助。

2 个答案:

答案 0 :(得分:2)

就像您在研究中发现的那样,使用Redis设置工作队列对于长时间运行的流程来说是一个很好的方法。一个很好的库是kue (https://github.com/learnboost/kue)

当涉及响应具有作业结果的请求时,请求挂起等待响应的outanding不是一个好的方法(并且可能不起作用,heroku杀死已经空闲的请求)一段时间)。

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

答案 1 :(得分:0)

Kue(来自@mattetre的答案)不再被维护。 Kue的GitHub页面建议使用Bull作为替代方案。这是用于Node.js的快速可靠的基于Redis的队列。