FastAPI流式响应StreamingResponse完全指南
📂 关联资源:WebSocket实时通信 · 异步编程深度解析
目录
流式响应是什么?
核心对比
传统HTTP是全量等包模式,服务器处理完所有数据才一次性返回,大文件、AI对话这类场景会造成内存溢出或用户等待焦虑。 而流式响应是边处理边推包模式,用异步生成器逐步发送数据:
- ✅ AI打字机:每生成一个字/词就推
- ✅ 大文件:分块读内存,避免一次性加载
- ✅ 实时日志:新日志写入队列就发
- ✅ 进度条:每完成一步更新状态
选SSE还是WebSocket?
StreamingResponse基础与优化
极简入门版
先用异步生成器 + StreamingResponse 发个数字序列:
处理客户端断开
客户端中途刷新/关闭会触发 asyncio.CancelledError,记得在生成器里捕获并释放资源:
SSE服务器发送事件
SSE是标准化的单向流式响应,浏览器原生支持 EventSource API,自带重连、事件类型区分功能,无需额外依赖。
标准SSE格式
SSE数据必须以 data: 开头,每条数据结束用两个换行符 \n\n,还可选加 event: 区分事件、id: 标识断点、retry: 调整重连间隔(毫秒)。
AI对话打字机效果
模拟或调用真实AI时,逐token推给前端,是提升AI产品体验的核心。
模拟本地AI打字机
文件流与日志实时推送
大文件分块下载
用 aiofiles 异步读文件,避免阻塞事件循环,同时控制内存占用:
生产环境关键配置
Nginx禁用缓冲
如果用Nginx做反向代理,必须禁用SSE/流式响应路径的缓冲,否则数据会被攒成大段才发给前端:
Uvicorn/Gunicorn参数
使用异步Worker(如 uvicorn.workers.UvicornWorker),增加超时时间,限制并发连接:
前端极简集成方案
SSE原生EventSource
浏览器原生支持,无需依赖库,自动重连(默认3秒):
📝 总结:FastAPI的StreamingResponse是构建流式应用的核心,配合SSE标准化格式和生产环境的缓冲/超时配置,能快速实现高可用的AI对话、实时日志、大文件下载等功能。

