在Heroku和node.js上的每个请求上运行的后台作业
我有一个应用程序需要运行一个很长的过程(每个请求需要30-60秒)。处理完成后,结果作为响应返回给请求。这在本地运行得很好,但会使我的Heroku实例崩溃 我希望发生的是:在Heroku和node.js上的每个请求上运行的后台作业,node.js,heroku,express,web-worker,Node.js,Heroku,Express,Web Worker,我有一个应用程序需要运行一个很长的过程(每个请求需要30-60秒)。处理完成后,结果作为响应返回给请求。这在本地运行得很好,但会使我的Heroku实例崩溃 我希望发生的是: 用户进入站点,请求发送到后端 后端立即返回,并启动另一个进行处理的进程/任务/作业 当处理结束时,响应将返回给正确的用户 我不知道我需要什么。基于一个小时的研究,我似乎可以使用Redis作为队列,工作人员可以每x分钟轮询一次。但我不明白的是,在处理结束后,如何确定将响应发送到哪个请求 是否有此示例的Express/nod
- 用户进入站点,请求发送到后端
- 后端立即返回,并启动另一个进行处理的进程/任务/作业
- 当处理结束时,响应将返回给正确的用户
是否有此示例的Express/node.js?任何指针都是有用的。就像您在研究中发现的那样,使用Redis设置工作队列对于长时间运行的进程来说是一种很好的方法。这是一个很好的图书馆 当涉及到用作业结果响应请求时,让outanding request挂起等待响应并不是一个好方法(heroku可能不起作用,它会杀死已闲置一段时间的请求)
您可以做的是,当请求发出时,启动后台作业并立即使用作业ID响应请求。然后,客户端可以轮询服务器以了解作业的状态,当作业完成后,它可以获取所需的结果。Kue(来自@mattere的答案)不再被维护。Kue的GitHub页面建议作为一个好的选择。对于Node.js来说,它是一个快速可靠的基于Redis的队列。
kue
不太好。我还没有为nodejs找到任何好的解决方案,所以最好编写自己的队列管理器。@happy_marmoset为什么kue不好?