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

Axios发送多个长耗时POST请求出现socket hang up及504错误如何解决

问题根因定位

这两类报错的本质如下:

  • socket hang up 是TCP连接被远端主动断开,通常是服务端/网关主动关闭了未完成的请求连接
  • 504 GATEWAY TIME OUT 是API层的代理/网关等待后端处理超时,主动返回的错误
    你单请求正常、多请求报错,排除代码逻辑问题的话,核心为两个方向:要么第三方API存在请求频率/并发限制,要么当前HTTP客户端的配置不合理。

可行解决方案

1. 调整Axios的基础请求配置

首先给每个请求单独设置足够长的超时时间,同时禁用默认的连接复用(部分服务端对长连接的保持时间短于你单请求的耗时,第二个请求复用旧连接的时候刚好被服务端断连):

// 开头先引入依赖(Node.js环境)
const http = require('http')
const https = require('https')

// 统一配置请求参数
const requestConfig = {
  headers: headers,
  timeout: 30 * 1000, // 设置30秒超时,远大于单请求7秒的耗时
  // 禁用连接复用,每个请求使用新的TCP连接
  httpAgent: new http.Agent({ keepAlive: false }),
  httpsAgent: new https.Agent({ keepAlive: false })
}

// 调用时传入配置
const toonifyRes = await axios.post(toonifyUrl, formData, requestConfig)

2. 强制请求之间增加间隔

哪怕是串行发送,部分API会对短时间内的连续请求做限流,你可以在两个请求之间加固定的等待时间:

// 封装等待工具函数
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))

// 第一个请求完成后,等待2秒再发第二个
await sleep(2000)

如果后续要发送更多请求,建议每次间隔设置在1~3秒,可根据实际测试结果调整。

3. 确认第三方API的限制规则

如果上面两个方案都无效,基本可以确定是第三方API的规则限制:

  • 部分API会限制同一身份(相同API Key/相同IP)的并发请求数,比如同时只能处理1个请求
  • 部分API会限制单位时间内的请求次数,比如1分钟最多调用3次
    你可以查看API的官方文档说明,或者联系对方技术支持确认限制规则,按照规则调整请求频率即可。

额外排查点

如果你使用同一个FormData实例发送多个请求,注意FormData在Node.js中是Stream类型,第一次请求发送后流已经被消费,第二次请求发送的就是空内容,也可能导致服务端长时间等待不返回触发超时,你可以尝试每个请求都重新生成一个新的FormData实例测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:48:01