You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
9.9 KiB

┌─────────────────────────────────────────────────────────────────┐
│ FastAPI Core 架构文档 │
│ WebSocket 重构版本 │
└─────────────────────────────────────────────────────────────────┘
📅 更新时间: 2024-08-13
🔄 版本: WebSocket架构重构 v2.0
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 架构重构目标
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 遵循单一职责原则 (Single Responsibility Principle)
✅ 提高代码可读性和可维护性
✅ 简化架构,减少职责重叠
✅ 便于单元测试和扩展
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏗️ 重构后的架构设计
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 app/core/websocket/
├── 📄 manager.py # 🎯 轻量级协调器
├── 📄 client_manager.py # 🔌 客户端生命周期管理
├── 📄 channel_manager.py # 📡 Channel创建和管理
├── 📄 send_controller.py # 📤 统一消息发送控制
├── 📄 heartbeat_manager.py # 💓 心跳消息管理
├── 📄 client.py # 🌐 WebSocket客户端
├── 📄 channel.py # 📢 消息队列Channel
└── 📄 serializer.py # 🔄 消息序列化
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 各组件职责分工
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ WebSocketManager (协调器)
└── 🎯 单一职责:协调各个专门的管理器
├── 协调客户端管理器
├── 协调Channel管理器
├── 协调发送控制器
├── 协调心跳管理器
└── 提供统一的API接口
2️⃣ WebSocketClientManager (客户端管理)
└── 🎯 单一职责:WebSocket客户端生命周期管理
├── 创建客户端
├── 连接客户端
├── 断开客户端
├── 移除客户端
└── 获取客户端信息
3️⃣ WebSocketChannelManager (Channel管理)
└── 🎯 单一职责:WebSocket Channel的创建和管理
├── 创建Channel
├── 销毁Channel
├── 获取Channel信息
└── 管理Channel生命周期
4️⃣ WebSocketSendController (发送控制)
└── 🎯 单一职责:统一的消息发送逻辑
├── 统一发送循环
├── 消息发送到WebSocket
├── 优先级控制
└── 发送任务管理
5️⃣ WebSocketHeartbeatManager (心跳管理)
└── 🎯 单一职责:心跳消息的发送和管理
├── 心跳任务管理
├── 心跳消息发送
├── 心跳间隔控制
└── 心跳状态监控
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 数据流向图
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📤 发送流程:
API请求 → WebSocketManager → ChannelManager → SendController → WebSocketClient
📥 接收流程:
WebSocketClient → WebSocketManager → ChannelManager → ReceiveChannel
💓 心跳流程:
HeartbeatManager → ChannelManager → SendController → WebSocketClient
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ 优先级机制
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 智能优先级控制:
1. 优先发送 send_channel 的业务数据
2. 只有在 send_channel 没有数据时才发送 heartbeat_channel 的心跳
3. 避免心跳占用业务数据带宽
4. 实现真正的优先级控制,避免并发竞争
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 API端点状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ endpoints.create_and_connect_client - 正常运行
✅ 支持创建WebSocket客户端
✅ 支持自动创建3个Channel (heartbeat, send, receive)
✅ 支持智能心跳机制
✅ 支持优先级消息发送
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 架构优势
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 单一职责原则:每个类都有明确的职责
✅ 高内聚低耦合:组件间依赖关系清晰
✅ 易于测试:每个组件可以独立测试
✅ 易于扩展:新增功能不影响现有组件
✅ 代码可读性:职责明确,逻辑清晰
✅ 维护性强:问题定位和修复更容易
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 性能优化
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 统一发送控制:避免多个发送循环竞争
✅ 智能心跳:避免不必要的带宽占用
✅ 异步处理:充分利用asyncio性能优势
✅ 资源管理:及时清理不需要的资源
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 使用示例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```python
# 创建并连接客户端
client = await websocket_manager.create_client("test_client", "ws://localhost:8080/ws", 30)
success = await websocket_manager.connect_client("test_client")
# 发送消息
await websocket_manager.send_message("test_client", "data", {"key": "value"})
# 发送心跳
await websocket_manager.send_heartbeat("test_client")
# 获取统计信息
stats = websocket_manager.get_stats()
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔧 测试状态
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 集成测试通过
✅ API端点测试通过
✅ 优先级机制测试通过
✅ 心跳机制测试通过
✅ 资源清理测试通过
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 待办事项
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔄 持续优化:
- 监控性能指标
- 优化内存使用
- 增强错误处理
- 完善日志记录
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📞 技术支持
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如有问题,请查看:
- modify.md - 详细修改记录
- 各组件源码注释
- 测试文件示例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━