我有一个需要运行很长时间的应用程序(每个请求需要30-60秒)。处理完成后,结果将作为响应返回给请求。这在本地工作正常,但它崩溃了我的Heroku实例。
我想要发生的是:
我不确定我需要的是什么。基于一个小时的研究,似乎我可以使用Redis作为队列,工人可以每隔x分钟轮询一次。但我无法理解的是如何确定在处理结束后将响应发送到哪个请求。
是否有Express / node.js样本?任何指针都有帮助。
答案 0 :(得分:2)
就像您在研究中发现的那样,使用Redis设置工作队列对于长时间运行的流程来说是一个很好的方法。一个很好的库是kue (https://github.com/learnboost/kue)。
当涉及响应具有作业结果的请求时,请求挂起等待响应的outanding不是一个好的方法(并且可能不起作用,heroku杀死已经空闲的请求)一段时间)。
您可以做的是在发出请求时启动后台作业并立即使用作业ID响应请求。然后,客户端可以在服务器上轮询作业的状态,当作业完成后,它可以获取所需的结果。
答案 1 :(得分:0)
Kue(来自@mattetre的答案)不再被维护。 Kue的GitHub页面建议使用Bull作为替代方案。这是用于Node.js的快速可靠的基于Redis的队列。