EventSourceResponse

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秒内,每隔一秒服务器将通过这个连接推送一个新的事件到客户端。

posted @ 2024-03-22 15:35  levylaw  阅读(983)  评论(0编辑  收藏  举报