服务器发SSE是基于HTTP的,所以我们可以用http的方式去和服务端建立通信,这样少了一些学习成本它是单向通信:即客户端向服务器建立连接后,服务器持续向客户端疯狂输出
这个和websocket不同,websocket是双向通信SSE返回的是事件流类型,事件流中包含标识符、类型、数据、注释,这些都是可选字段
FastAPI 是一个 Python 框架,可以轻松构建 API。
在本教程中,我们将使用 FastAPI 创建一个简单的 SSE 服务器,它将每秒发送一条消息。
Python sse-starlette包_程序模块 - PyPI - Python中文网
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import uvicorn
import time
from sse_starlette.sse import ServerSentEvent, EventSourceResponse
import json
app = FastAPI()
def gen():
for i in range(10):
time.sleep(1)
yield {"data":str(i)}
@app.get("/items/")
async def read_items():
html_content = """
<html>
<head>
<title>Some HTML in here</title>
</head>
<body>
<h1>Look ma! HTML!</h1>
</body>
</html>
"""
return HTMLResponse(content=html_content, status_code=200)
@app.get("/")
def main():
def decorate(generator):
for item in generator:
yield ServerSentEvent(json.dumps(item, ensure_ascii=False), event='delta')
return EventSourceResponse(decorate(gen()))
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=9550)