服务端推送

在服务器推送技术中,服务器在消息可用后立即主动向客户端发送消息。其中,有两种类型的服务器推送:SSE和 WebSocket。

SSE(Server-Send Events)

SSE 是一种在基于浏览器的 Web 应用程序中仅从服务器向客户端发送文本消息的技术。SSE基于 HTTP 协议中的持久连接, 具有由 W3C 标准化的网络协议和 EventSource 客户端接口,作为 HTML5 标准套件的一部分。

那么,在FastAPI中怎么实现呢?

下面将介绍其实现过程:

pip install asyncio
pip install sse-starlette

代码:

import json

from fastapi import FastAPI, Query, Path
import uvicorn
from starlette.requests import Request
import asyncio
from sse_starlette import EventSourceResponse

app = FastAPI()


@app.get("/stream")
async def flush_stream(request: Request):
    async def event_generator(request: Request):
        res_str = "双天至尊真是一部好的电视剧!!!"
        for idx, word in enumerate(res_str):
            if await request.is_disconnected():
                print("连接已中断")
                break
            data = json.dumps({"id": idx, "message": word}, ensure_ascii=False)
            yield data
            await asyncio.sleep(1)

    return EventSourceResponse(event_generator(request))


if __name__ == '__main__':
    uvicorn.run("Run:app", host="0.0.0.0", port=8080)

效果:

FastAPI通过SSE进行流式输出-LMLPHP FastAPI通过SSE进行流式输出-LMLPHP

11-23 10:43