我有一个应用程序需要运行很长的过程(每个请求需要 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/