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

我有一个应用程序需要运行一个非常漫长的过程(每个请求需要30-60秒)。 处理结束后,返回结果作为响应。 这工作正常,但它崩溃了我的Heroku实例。

我想要发生的是:

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

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

有没有一个示例Express / node.js? 任何指针都是有帮助的。

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

当涉及到对工作结果的请求时,如果有人要求等待回应并不是一个好的方法(也许不行,那么Heroku会杀死一段时间内闲置的请求的时间)。

你可以做的是什么时候请求开始后台作业,并立即回应请求与作业ID。 然后,客户端可以轮询服务器的作业状态,当作业完成后,可以获取所需的结果。