feat: add WebSocket router for real-time broadcast updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
30
backend/routers/ws.py
Normal file
30
backend/routers/ws.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import asyncio
|
||||||
|
import json
|
||||||
|
from fastapi import APIRouter, WebSocket, WebSocketDisconnect
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
connected_clients: list[WebSocket] = []
|
||||||
|
|
||||||
|
|
||||||
|
@router.websocket("/ws")
|
||||||
|
async def websocket_endpoint(ws: WebSocket):
|
||||||
|
await ws.accept()
|
||||||
|
connected_clients.append(ws)
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
await ws.receive_text()
|
||||||
|
except WebSocketDisconnect:
|
||||||
|
connected_clients.remove(ws)
|
||||||
|
|
||||||
|
|
||||||
|
async def broadcast(event_type: str, data: dict):
|
||||||
|
message = json.dumps({"type": event_type, "data": data})
|
||||||
|
disconnected = []
|
||||||
|
for ws in connected_clients:
|
||||||
|
try:
|
||||||
|
await ws.send_text(message)
|
||||||
|
except Exception:
|
||||||
|
disconnected.append(ws)
|
||||||
|
for ws in disconnected:
|
||||||
|
connected_clients.remove(ws)
|
||||||
Reference in New Issue
Block a user