netnr 2024-12-15

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 禁用缓冲,从而允许将响应与后端服务器同步,并在收到响应后立即发送给客户端。这对于需要实时流式传输的应用至关重要。

登录写评论