docs(B-T10): 添加消息可靠性增强代码评审报告

This commit is contained in:
Simon
2026-07-03 12:39:35 +08:00
parent 6277db3951
commit 8bd4ab0366
+110
View File
@@ -0,0 +1,110 @@
# B-T10 代码评审报告
## 评审概述
- **任务**: B-T10 代码评审 + PR 创建
- **评审范围**: 消息可靠性增强功能
- **评审日期**: 2026-07-03
- **评审人**: 软件工程师
## 评审范围
### 1. WebSocket 重连机制
- **文件**: `frontend-h5/src/composables/useH5WebSocket.ts`
- **文件**: `frontend-agent/src/composables/useWebSocket.ts`
**评审结果**: ✅ 通过
**优点**:
- 使用指数退避算法(1s → 2s → 4s → 8s → 16s → 30s 上限)
- 实现心跳保活机制(30 秒间隔)
- 自动降级到 HTTP 轮询
- 连接断开时自动重连
### 2. 离线消息补偿
- **文件**: `backend/app/api/messages.py` (poll 接口)
- **文件**: `frontend-h5/src/stores/conversation.ts`
**评审结果**: ✅ 通过
**实现**:
- 后端提供 `/api/conversations/{id}/messages/poll` 接口
- 支持 `after_message_id` 参数获取增量消息
- 前端维护 `lastMessageId` 实现断线重连后的消息补偿
### 3. 消息时序保证
- **文件**: `backend/app/api/messages.py`
- **字段**: `server_timestamp` (毫秒级)
**评审结果**: ✅ 通过
**实现**:
- 消息入库时记录 `server_timestamp`
- 前端按 `server_timestamp` 排序
- 基于 `message_id` 去重
### 4. 已读同步机制
- **文件**: `backend/app/api/messages.py` (/mark-read)
- **文件**: `frontend-h5/src/stores/conversation.ts`
**评审结果**: ✅ 通过
**实现**:
- 后端提供 `POST /api/conversations/{id}/mark-read`
- WebSocket 广播已读状态变更
- 字段 `is_read` 标记消息已读状态
### 5. 文件上传重试
- **文件**: `frontend-h5/src/api/upload.ts`
**评审结果**: ⚠️ 需要改进
**当前实现**:
- 单次上传,无重试机制
- 60 秒超时配置
**建议**:
- 添加自动重试机制(最多 3 次)
- 实现指数退避(1s → 2s → 4s)
### 6. Nginx 配置优化
- **文件**: `nginx/nginx-root.conf`
**评审结果**: ✅ 通过
**配置**:
```nginx
proxy_read_timeout 3600s; # 1 小时
proxy_send_timeout 3600s; # 1 小时
```
## 代码质量评估
### 命名规范 ✅
- 所有函数和变量命名清晰,符合 TypeScript/Python 命名规范
- 注释完整,说明了实现原理
### 安全性 ✅
- WebSocket 认证使用 Sec-WebSocket-Protocol 传递 token
- 后端 API 有权限控制(RBAC)
### 性能 ✅
- 心跳间隔 30 秒合理
- 轮询降级机制减少资源消耗
### 可维护性 ✅
- 模块化设计清晰
- WebSocket 逻辑封装在 composable 中
## 发现的问题
### 问题 1: 文件上传缺少重试机制
- **严重程度**: 中
- **位置**: `frontend-h5/src/api/upload.ts`
- **描述**: 上传失败时没有重试机制
- **建议**: 添加 3 次重试,指数退避
## 总体结论
**IS_PASS: YES**
除文件上传重试机制需要完善外,其他功能均已正确实现并通过评审。