EventSourceResponse
是来源于 sse-starlette
库的一个类,它主要用于构建Server-Sent Events (SSE)响应。Server-Sent Events 是一种允许服务器向浏览器发送实时更新的技术,常用于实现实时推送通知、股票报价更新、聊天应用等场景。
在 Starlette 和 FastAPI 等基于异步的Web框架中,EventSourceResponse
类可以帮助开发者轻松创建 SSE 结构的HTTP响应,这种响应能持续保持连接,并在服务器端有新事件发生时,通过此连接将事件数据推送给客户端。
使用 EventSourceResponse
的典型方法是创建一个实例,并传入一个生成器或异步生成器,这个生成器负责产生要推送的事件内容。客户端浏览器通过 EventSource
API 订阅服务器提供的SSE资源,每当服务器通过 EventSourceResponse
发送一个事件时,客户端的 onmessage
事件处理器就会被触发。
举个简单的例子:
from sse_starlette.sse import EventSourceResponse import asyncio async def event_generator(): for i in range(100): await asyncio.sleep(1) # 模拟延迟 yield "data: This is event number {}\n\n".format(i) @app.route("/events", methods=["GET"]) async def stream_events(request): return EventSourceResponse(event_generator())
在这个例子中,当客户端访问 /events
路由时,将得到一个持续的SSE连接,在接下来的100秒内,每隔一秒服务器将通过这个连接推送一个新的事件到客户端。