Javascript 处理Loooong HTTP请求(当前使用axios)
我有一个服务器,可以转换大文件并将结果上传到云存储。今天我终于达到了这个极限,转换花了一分钟,上传又花了2分钟,导致了一个很长的HTTP请求。客户端正在使用axios调用Express服务器 我在服务器端经历的是,大约2分钟后,请求再次被调用(没有用户输入)。然后,这两个请求在客户端失败(但在服务器上成功)。结果是对同一个文件进行了两次转换,并进行了两次无用的上载,因为客户端收到了错误通知 我相信我看到的是重试超时中止重试超时中止序列。我尝试将Javascript 处理Loooong HTTP请求(当前使用axios),javascript,node.js,reactjs,express,axios,Javascript,Node.js,Reactjs,Express,Axios,我有一个服务器,可以转换大文件并将结果上传到云存储。今天我终于达到了这个极限,转换花了一分钟,上传又花了2分钟,导致了一个很长的HTTP请求。客户端正在使用axios调用Express服务器 我在服务器端经历的是,大约2分钟后,请求再次被调用(没有用户输入)。然后,这两个请求在客户端失败(但在服务器上成功)。结果是对同一个文件进行了两次转换,并进行了两次无用的上载,因为客户端收到了错误通知 我相信我看到的是重试超时中止重试超时中止序列。我尝试将{timeout:5*60*1000}传递给axio
{timeout:5*60*1000}
传递给axios以获得5分钟的超时时间,但没有成功
我们计划将流程更改为异步、带外、Web套接字等。但在此之前,我如何确保请求不会失败?是否需要处理浏览器级别的设置?或者使用不同于axios的库?多亏了所有的评论,你们都做到了。中止是由特快专递发出的。添加
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;
请检查,这可能是服务器的问题,而不是Axios。我不熟悉Axios,但一般来说,如果建立了HTTP连接,浏览器将无限期地等待。在过去,AJAX请求需要花费数小时才能最终成功。很可能,您的服务器或反向代理或其他东西正在超时。您可以发布数据包捕获吗?是否可以增加Express服务器中的超时时间
server.timeout=999999
(以毫秒为单位)我以前遇到过类似的问题。当我使用异步进程时,问题就解决了。您可以在异步进程完成之前从服务器返回成功状态。您可以发送文件,然后关闭请求,并在服务器执行操作并使用其进度更新会话时长时间轮询进度状态