在 EduAgent 项目中,前端需要实时接收 Agent 的执行状态更新。我们选用了 FastAPI + WebSocket + Redis PubSub 这套组合拳。
FastAPI + WebSocket:实时通信最佳实践
从连接管理到消息广播,总结 FastAPI 中 WebSocket 的完整落地方案与常见踩坑点。
连接管理
使用 FastAPI 的 WebSocket 端点,每个客户端连接时分配唯一的 client_id,存入 Redis Set。通过心跳机制(每 30 秒 ping/pong)检测断线并自动清理。
消息广播
后端 Celery 任务完成后,通过 Redis PubSub 发布状态变更消息。WebSocket 管理模块订阅相关频道,将消息推送给对应的客户端。这样实现了 跨进程的实时推送,Celery Worker 和 WebSocket Server 完全解耦。
踩坑记录
1) WebSocket 连接在 Nginx 反向代理后需要特殊配置 proxy_read_timeout;2) Redis PubSub 消息不持久化,关键状态需要额外存入数据库;3) 大量并发连接时需要用 ConnectionPool 管理 Redis 连接。
技术栈
FastAPI · WebSocket · Redis PubSub · Celery · Nginx · Docker