目录
- 一、前言
- 二、代码示例
一、前言
SSE是基于HTTP的单向通信协议(即半双工),只允许服务器向客户端推送数据。使用传统的HTTP协议(http://或https://),是HTTP/1.1的扩展。它通过Content-Type: text/event-stream头标识流数据。每次传输数据时都会发送HTTP头部,数据传输量相对大些,因此效率低于WebSocket,适合需要持续更新、轻量级、频率适中的数据推送。内置了自动重连机制,支持在连接断开后自动重新连接到服务器,并提供Last-Event-ID标头以确保消息的顺序性。
二、代码示例
def sse_stream():def eventStream():id = 0while True:id = id + 1event = 'message'if id == 1:event = 'time_reading'elif id < 20:event = 'message'else:breaktime.sleep(1/10) # 50Hz,每秒发送约 50 条数据event_dict = {"id": id,"event": event,"value": get_time_json()}str_out = f"data:{json.dumps(event_dict, ensure_ascii=False)}\n\n"print(str_out) # 在服务器端打印发送的数据yield str_outreturn Response(stream_with_context(eventStream()), content_type='text/event-stream')
SSE执行的效果如下