因此,我有一个接受请求的Express服务器。请求是网络抓取,需要3-4分钟才能完成。我正在使用Bull对作业排队,并在它准备好时处理它。现在的挑战是将处理过的作业的结果作为响应发送回。我有办法做到这一点吗?我在heroku上运行这个应用程序,但是heroku的请求超时时间为30秒。
发布于 2020-09-03 03:43:08
由于超时,您总是需要立即发送响应。由于您的过程大约需要3-4分钟,所以最好立即发送回复,说明请求已成功接收并将被处理。
现在,当任务完成后,可以使用socket.io或web套接字从服务器端通知客户端。您还可以传递一个响应。
客户端还可以连续检查任务是否在服务器端完成,这称为轮询,在不支持web套接字的旧浏览器中是必需的。当浏览器不支持网络套接字时,socket.io回到轮询。
有关更多信息和文档,请访问socket.io。
发布于 2020-09-03 04:51:34
您不必等到后端完成请求,才能确定请求的对象。验证用户身份。执行res.status(202).send({message:”text});,即使将响应发送给客户端,您也可以继续处理和处理
注意:不要将返回关键字放在res.status之前.
HyperText传输协议(HTTP202)接受的响应状态代码表示请求已被接受用于处理,但处理尚未完成;事实上,处理可能尚未开始。请求最终可能会被执行,也可能不会被执行,因为当处理实际发生时,它可能被不允许。
202是未提交的,这意味着HTTP无法在以后发送异步响应,指示处理请求的结果。它适用于其他进程或服务器处理请求的情况,或用于批处理。
https://stackoverflow.com/questions/63716177
复制相似问题