我有一台服务器可以转换大文件并将结果上传到云存储。今天我终于达到了这个限制,转换花费了超过一分钟,上传又花费了两分钟,导致 HTTP 请求非常长。客户端是React,使用axios调用Express服务器。
我在服务器端遇到的情况是,大约 2 分钟后,请求再次被调用(没有用户输入)。然后,两个请求在客户端上都会失败(但在服务器上会成功)。结果是同一文件进行了 2 次转换,并进行了 2 次无用的上传,因为客户端收到了错误通知。
我相信我看到的是一个尝试-超时-中止-重试-超时-中止序列。我尝试将 {timeout: 5 * 60 * 1000}
传递给 axios 以获得 5 分钟超时 - 无济于事。
我们计划将流程更改为异步、带外、Web 套接字等。但在那之前,我如何确保请求不会失败?我需要处理浏览器级别的设置吗?或者使用与 axios 不同的库?
最佳答案
感谢所有的评论 - 你们做到了。中止是由 Express 发出的。添加 req.setTimeout(5 * 60 * 1000)
解决了这个问题。谢谢大家!
更新:在服务器
级别添加超时效果更好:
//...express middleware + routs + etc...
const server = app.listen(PORT, function() {
console.log(`listening on ${PORT}`);
});
//set timeout of requests to 5 minutes
server.timeout = 5 * 60 * 1000;
关于javascript - 处理 looooong HTTP 请求(当前使用 axios),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422845/