You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Axios超时时间解决批量请求socket hung up问题?

解决Axios并发大量请求时的socket hung up问题

你遇到的这个问题其实很常见——浏览器和服务器对并发连接数都有默认限制,比如Chrome这类浏览器同一域名下默认最多同时开6个TCP连接,一下子发500个请求肯定会触发连接排队和超时,哪怕服务器还在处理,前端这边的连接可能已经因为等待太久断开了。下面给你两个可行的解决方案:

一、配置Axios自定义超时时间

首先可以先尝试调整超时时间,给服务器足够的处理时间,避免前端过早判定连接断开。

1. 全局配置超时

如果所有请求都需要统一超时设置,可以在创建Axios实例的时候配置:

import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: '你的接口地址',
  timeout: 30000, // 30秒超时,可根据实际业务调整
});

2. 单个请求级别的超时

如果只有这批批量请求需要特殊超时,也可以在单个请求里单独设置:

const requests = [];
for (let i = 0; i < 500; i++) {
  requests.push(
    axiosInstance.get('/your-api-endpoint', {
      timeout: 60000, // 该请求单独用60秒超时
      params: { id: i }
    })
  );
}

不过要注意:调整超时只是缓解手段,本质上并发数过高的问题没解决,还是可能出现连接排队的情况。

二、拆分请求队列(更推荐的方案)

解决这个问题的根本办法是控制并发数,把500个请求分成若干小批次,一批一批执行,避免同时发起大量请求。

示例代码:分批执行请求

这里写一个通用的分批处理函数,你可以直接复用:

async function batchRequests(requests, batchSize = 20) {
  const results = [];
  // 把请求数组切割成多个小批次
  for (let i = 0; i < requests.length; i += batchSize) {
    const batch = requests.slice(i, i + batchSize);
    // 等待当前批次所有请求完成
    const batchResults = await Promise.allSettled(batch);
    results.push(...batchResults);
    // 可选:批次之间加个小延迟,进一步减轻服务器压力
    await new Promise(resolve => setTimeout(resolve, 500));
  }
  return results;
}

// 使用方式
const requests = [];
// 先创建你的500个请求Promise
for (let i = 0; i < 500; i++) {
  requests.push(axiosInstance.get('/your-api-endpoint', { params: { id: i } }));
}

// 每20个请求一批执行
batchRequests(requests, 20).then(results => {
  // 按需处理结果:过滤成功/失败的请求
  const successfulResponses = results.filter(r => r.status === 'fulfilled').map(r => r.value);
  const failedRequests = results.filter(r => r.status === 'rejected').map(r => r.reason);
  console.log('成功请求数:', successfulResponses.length);
  console.log('失败请求数:', failedRequests.length);
});

为什么这个方案更好?

  • 避免触发浏览器的并发连接限制,从根源减少socket连接超时的概率
  • 减轻服务器的瞬时压力,服务器不需要一次性处理几百个请求
  • 可以灵活控制请求节奏,甚至通过批次间的延迟进一步降低出错率

总结

如果只是偶尔出现超时,调整Axios的超时时间可以快速解决;但如果是固定的大量请求场景,拆分请求队列才是更稳定、更合理的方案,能从根源上避免并发数过高带来的各种问题。

内容的提问来源于stack exchange,提问作者Sudheej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:49:57