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

部署至AWS EC2后Nest.js的res.write()无法流式传输数据

排查方向与解决建议

针对部署AWS EC2后SSE实时进度更新失效的问题,以下是具体排查点和解决方法:

1. 强制关闭Node.js响应缓冲

EC2环境下Node.js可能默认启用响应缓冲,即使调用res.flush()也无法实时推送数据,可通过以下方式调整:

  • 添加Transfer-Encoding: chunked头,明确告知采用分块传输:
    res.setHeader('Transfer-Encoding', 'chunked');
    
  • 禁用Nagle算法,避免小数据包被合并发送:
    res.socket.setNoDelay(true);
    
  • 确保立即发送响应头:
    res.flushHeaders();
    

2. 检查NestJS全局中间件/拦截器

若应用启用了全局压缩(compression)中间件,它会缓冲响应内容直到上传完成才发送,直接导致SSE失效,需在上传路由上禁用压缩:

  • 若使用compression包,可通过路由级配置跳过:
    import { compression } from 'compression';
    
    // 在模块中配置,针对上传路由禁用压缩
    app.use('/upload', (req, res, next) => {
      req.skipCompression = true;
      next();
    });
    app.use(compression({ 
      filter: (req, res) => req.skipCompression ? false : compression.filter(req, res) 
    }));
    
  • 检查是否存在全局响应拦截器,这类拦截器可能会收集所有响应数据再统一返回,需为上传路由添加@SkipInterceptors()装饰器跳过。

3. 调整AWS SDK上传分块配置

EC2到S3的网络延迟低,可能导致httpUploadProgress事件触发频率极低甚至合并触发,可手动设置分块大小强制触发进度事件:

const upload = new Upload({
    client: s3Client,
    params: {
        Bucket: process.env.AWS_S3_BUCKET_NAME,
        Key: key,
        Body: file.buffer,
        ContentType: file.mimetype,
    },
    leavePartsOnError: false,
    partSize: 5 * 1024 * 1024, // 设置5MB分块,可根据文件大小调整
});

同时在进度回调中添加日志,确认EC2上是否真的实时触发了进度事件,排除SDK事件触发异常的可能。

4. 验证EC2网络与TCP配置

  • 检查EC2实例的TCP连接超时设置,确保SSE所需的持久连接不会被提前关闭:
    # 查看当前TCP超时设置
    sysctl net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_intvl net.ipv4.tcp_keepalive_probes
    # 调整为适合长连接的参数(示例)
    sysctl -w net.ipv4.tcp_keepalive_time=600 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=10
    
  • 确认EC2安全组允许持久连接的端口(默认HTTP/HTTPS端口已开放,但需确保无额外规则限制长连接)。

5. 优化SSE消息格式

确保SSE消息格式完全符合规范,避免因格式问题导致客户端无法实时解析:

  • 建议用JSON.stringify避免手动转义错误:
    res.write(`data: ${JSON.stringify({
      msg: "File Uploading in progress",
      data: { progress },
      success: true
    })}\n\n`);
    

内容的提问来源于stack exchange,提问作者Muhammad Younus Raza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:35:18