fastapi sse流式接收数据
时间: 2025-05-04 19:56:43 浏览: 40
### 实现FastAPI中的SSE(Server-Sent Events)
在现代Web开发中,服务器发送事件(SSE)是一种允许服务器向客户端推送实时更新的技术。它基于HTTP协议,相较于WebSocket更加轻量级,并且更容易实现单向通信。
以下是关于如何在FastAPI中实现SSE的具体方法:
#### 配置FastAPI应用支持SSE
为了实现实时数据流传输,可以利用`starlette`库中的`StreamingResponse`类来创建一个持续的连接通道[^2]。下面是一个完整的代码示例,展示如何设置SSE并返回动态生成的数据给前端。
```python
from fastapi import FastAPI, Response
import asyncio
import time
app = FastAPI()
async def event_generator():
while True:
# Simulate a long-running process that generates data periodically.
current_time = {"time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}
yield f"data: {current_time}\n\n"
await asyncio.sleep(1)
@app.get("/stream")
async def stream_data(response: Response):
response.headers["Content-Type"] = "text/event-stream"
response.headers["Cache-Control"] = "no-cache"
response.headers["Connection"] = "keep-alive"
return EventSourceResponse(event_generator())
```
上述代码定义了一个名为`event_generator()`的异步函数作为事件源,该函数会每隔一秒生成一次当前时间戳,并将其封装成SSE兼容的消息格式[^3]。
#### 关键点解析
- **消息格式**: SSE规定每条消息都应以`data:`开头,后面跟着实际要传递的内容,最后加上两个换行符`\n\n`表示结束一条记录。
- **响应头设置**: 设置必要的HTTP头部字段告知浏览器这是一个持久化的文本流服务而非普通的HTML文档请求[^4]。
- **EventSourceResponse对象**: 这是由Starlette框架提供的一种特殊类型的响应处理器专门用于处理此类场景下的连续数据输出操作[^5]。
---
### 注意事项
尽管上面的方法能够很好地演示基本功能,但在生产环境中还需要考虑更多因素比如错误恢复机制、资源释放等问题。例如当客户端断开链接或者网络异常中断等情况发生时应该及时停止后台任务以免浪费计算能力;另外也要注意保护敏感信息不被非法获取等安全方面的要求[^6]。
---
阅读全文
相关推荐


















