StreamingResponse
通过 HTTP 协议,在单个请求中持续传输数据的方式
Server-Sent Events (SSE)
服务器向客户端推送数据的标准化协议,建立在 HTTP 之上
ref https://developer.mozilla.org/zh-CN/docs/Web/API/Server-sent_events/Using_server-sent_events
对比
| 特性 | StreamingResponse | Server-Sent Events(SSE) |
|---|---|---|
| 通信方式 | 单次请求的持续响应 | 服务器主动推送,客户端被动接收 |
| 数据格式 | 自定义,灵活 | 标准化的事件流格式 |
| 连接特性 | 连接在响应完成后关闭 | 连接持续,服务器可随时推送数据 |
| 浏览器支持 | 需要手动处理数据解析 | 浏览器原生支持 EventSource 接口 |
| 适用场景 | 大数据量传输,如文件、媒体流 | 实时数据更新,如通知、消息、行情等 |
nginx 代理配置
# 禁用缓冲
proxy_buffering off; # 默认启用,须设置 off
proxy_cache off; # 默认禁用,可选
# 超时设置
proxy_read_timeout 360s;
proxy_send_timeout 360s;
# 主机头
proxy_set_header Host $host;
重点 proxy_buffering 设置为 off ,不然不能实时输出
ref https://nginx.org/en/docs/http/ngx_http_proxy_module.html
方式二:设置响应头 X-Accel-Buffering
Response.Headers["X-Accel-Buffering"] = "no"
X-Accel-Buffering 是 NGINX 特有的响应头,用于控制 NGINX 是否缓冲来自代理服务器的响应。这使得后端应用程序能够针对每个请求覆盖 NGINX 的默认配置,可能的值:yes 或 no。
X-Accel-Buffering: yes(默认)启用缓冲。NGINX 会将后端返回的整个响应读取到缓冲区(内存或磁盘)中,然后再发送给客户端。这通常建议用于优化低速客户端的性能,并高效处理大型文件。
X-Accel-Buffering: no 禁用缓冲,从而允许将响应与后端服务器同步,并在收到响应后立即发送给客户端。这对于需要实时流式传输的应用至关重要。