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

使用Strapi+Fly.io传输数据时遇WebSocket连接关闭错误

Strapi + Fly.io 数据传输时请求超时与WebSocket连接关闭问题解决方案

问题核心

从日志可见,数据传输过程中触发ERR_HTTP_REQUEST_TIMEOUT请求超时,进而导致WebSocket连接关闭(readyState 3),本质是Fly.io与Strapi的默认超时配置不匹配长时数据传输需求。

解决方案

1. 调整Fly.io连接超时配置

Fly.io默认HTTP请求超时为30秒,与日志中27秒左右的超时触发时间吻合。修改fly.toml文件,延长超时并配置健康检查:

# 延长HTTP请求超时至2分钟
[services.http_options]
  timeout = "120s"

# 配置TCP检查,避免实例被误判为不健康
[[services.tcp_checks]]
  grace_period = "30s"
  interval = "1m"
  timeout = "10s"

# 配置HTTP健康检查
[[services.http_checks]]
  grace_period = "30s"
  interval = "1m"
  method = "GET"
  path = "/"
  timeout = "10s"

修改后执行fly deploy生效。

2. 调整Strapi服务器与数据传输插件超时

在Strapi的config/server.js中延长HTTP服务器超时:

module.exports = ({ env }) => ({
  host: env('HOST', '0.0.0.0'),
  port: env.int('PORT', 1337),
  app: {
    keys: env.array('APP_KEYS'),
  },
  server: {
    timeout: 120000, // 2分钟,单位毫秒
    keepAliveTimeout: 120000,
  },
});

在config/plugins.js中配置WebSocket心跳维持连接:

module.exports = ({ env }) => ({
  'data-transfer': {
    enabled: true,
    config: {
      websocket: {
        pingInterval: 25000, // 25秒发送一次心跳包
        pingTimeout: 50000,
      },
    },
  },
});

3. 优化数据传输负载

  • 拆分传输任务:避免一次性全量传输,按内容类型分批次执行数据传输
  • 临时禁用非必要插件:减少Strapi服务器资源占用,避免因资源耗尽导致连接中断

4. 升级Fly.io实例规格

若数据量较大,Strapi传输过程会占用较多CPU和内存,将Fly.io实例从shared-cpu-1x升级至更高规格(如shared-cpu-2x),避免资源瓶颈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:27:40