服務端推送
在服務器推送技術中,服務器在消息可用后立即主動向客戶端發送消息。其中,有兩種類型的服務器推送:SSE和 WebSocket。
SSE(Server-Send Events)
SSE 是一種在基于瀏覽器的 Web 應用程序中僅從服務器向客戶端發送文本消息的技術。SSE基于 HTTP 協議中的持久連接, 具有由 W3C 標準化的網絡協議和 EventSource 客戶端接口,作為 HTML5 標準套件的一部分。
那么,在FastAPI中怎么實現呢?
下面將介紹其實現過程:
pip install asyncio
pip install sse-starlette
代碼:
import jsonfrom fastapi import FastAPI, Query, Path
import uvicorn
from starlette.requests import Request
import asyncio
from sse_starlette import EventSourceResponseapp = 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("連接已中斷")breakdata = json.dumps({"id": idx, "message": word}, ensure_ascii=False)yield dataawait asyncio.sleep(1)return EventSourceResponse(event_generator(request))if __name__ == '__main__':uvicorn.run("Run:app", host="0.0.0.0", port=8080)
效果:
?