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
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 - 详细修改记录
|
|
- 各组件源码注释
|
|
- 测试文件示例
|
|
|
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|