使用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
相关产品推荐
相关产品推荐

