Files
tick-stock-panel/examples/open-api/04_events_stream.py
T

25 lines
1.0 KiB
Python
Raw Normal View History

"""示例 4 — 事件流 SSE (任意有效 Token; 票据继承 scope)。
EventSource 带不了 Authorization 头, 走两步:
POST /api/events/ticket (Bearer) → 一次性票据 (60 秒)
GET /api/events?ticket=… → hello 帧 + 事件 (此处演示 alert 告警推送)
票据一次性: 断线重连需重新换票。浏览器端用 EventSource,
脚本端像本例一样逐行读流即可。
"""
import itertools
from common import call, sse
# 1. 换票 (任意 scope 的 Token 都可; 流里只推票据 scope 覆盖的事件)
ticket = call("POST", "/api/events/ticket")["ticket"]
print("票据已签发 (60s 内一次性)")
# 2. 订阅: hello 帧之后, 面板触发任意监控告警即可看到 alert 事件
for event in itertools.islice(sse(f"/api/events?ticket={ticket}"), 5):
if event.get("event") == "hello":
print("hello: 票据 scope =", event.get("data", ""))
continue
print(f"[{event.get('event')}] {event.get('data', '')[:120]}")
print("(收到 5 帧后退出; 生产环境保持连接持续接收)")