|
|
|
# 修改记录
|
|
|
|
|
|
|
|
## 2024-12-19 ProtocolMessageHandler 优化
|
|
|
|
|
|
|
|
### 修改文件
|
|
|
|
- `X1.WebSocket/Handlers/ProtocolMessageHandler.cs`
|
|
|
|
|
|
|
|
### 主要改进
|
|
|
|
|
|
|
|
#### 1. 方法重命名
|
|
|
|
- `ProtocolMessageOutput` → `ProcessProtocolMessageAsync`
|
|
|
|
- 更符合方法命名规范,清晰表达方法功能
|
|
|
|
|
|
|
|
#### 2. 代码结构优化
|
|
|
|
- 将原来的单一方法拆分为多个职责明确的方法:
|
|
|
|
- `ProcessProtocolMessageAsync`: 处理协议消息的主要逻辑
|
|
|
|
- `ProcessProtocolLogs`: 处理协议日志数组
|
|
|
|
- `ProcessSingleProtocolLog`: 处理单个协议日志
|
|
|
|
|
|
|
|
#### 3. 错误处理改进
|
|
|
|
- 在 `ProcessProtocolMessageAsync` 方法中添加了完整的异常处理机制
|
|
|
|
- 区分 JSON 反序列化错误和其他异常
|
|
|
|
- 提供更详细的错误日志信息
|
|
|
|
- 移除了 `HandleAsync` 方法中不必要的 try-catch,让异常向上传播
|
|
|
|
- 优化异常处理策略:记录错误日志后不再抛出异常,避免异常传播
|
|
|
|
|
|
|
|
#### 4. 日志记录优化
|
|
|
|
- 使用结构化日志记录,提高日志可读性
|
|
|
|
- 添加处理进度和统计信息的日志
|
|
|
|
- 改进日志级别使用,Debug/Info/Warning/Error 合理分配
|
|
|
|
- 美化协议日志输出格式,使用【】括号突出字段名称,提高可读性
|
|
|
|
- 添加空值处理,使用 "N/A" 标识空值
|
|
|
|
- 时间格式化为易读的时分秒毫秒格式
|
|
|
|
|
|
|
|
#### 5. 性能优化
|
|
|
|
- 添加 JsonSerializerOptions 配置,提高序列化性能
|
|
|
|
- 移除不必要的异步操作(ProcessProtocolMessage、ProcessProtocolLogs 和 ProcessSingleProtocolLog)
|
|
|
|
- 避免为了异步而异步的代码模式,只在实际需要异步的地方使用 async/await
|
|
|
|
|
|
|
|
#### 6. 代码质量提升
|
|
|
|
- 添加详细的 XML 文档注释
|
|
|
|
- 改进变量命名(MsgData → messageData)
|
|
|
|
- 使用 null 检查和空值验证
|
|
|
|
- 添加输入参数验证
|
|
|
|
|
|
|
|
#### 7. 可维护性改进
|
|
|
|
- 方法职责单一,便于测试和维护
|
|
|
|
- 代码结构清晰,易于理解和扩展
|
|
|
|
- 为未来业务逻辑扩展预留了接口
|
|
|
|
|
|
|
|
### 技术细节
|
|
|
|
- 使用 JsonSerializerOptions 配置大小写不敏感和驼峰命名
|
|
|
|
- 添加了消息数量统计和错误计数
|
|
|
|
- 改进了异常处理的分层结构
|
|
|
|
- 优化了日志输出的格式和内容
|
|
|
|
|
|
|
|
## 2024-12-19 WebSocketMiddleware ProcessWebSocketMessages 修复
|
|
|
|
|
|
|
|
### 修改文件
|
|
|
|
- `X1.WebSocket/Middleware/WebSocketMiddleware.cs`
|
|
|
|
|
|
|
|
### 主要问题修复
|
|
|
|
|
|
|
|
#### 1. 消息缓冲区共享问题
|
|
|
|
- **问题**:`_messageBuffer` 是类的成员变量,被所有连接共享,导致数据混乱
|
|
|
|
- **修复**:为每个连接创建独立的 `WebSocketMessageBuffer` 实例
|
|
|
|
- **影响**:避免多连接间的数据干扰,提高并发安全性
|
|
|
|
|
|
|
|
#### 2. 消息超时逻辑错误
|
|
|
|
- **问题**:`messageStartTime` 在循环中被重置,超时检查逻辑有问题
|
|
|
|
- **修复**:基于最后接收消息的时间进行超时检查
|
|
|
|
- **影响**:确保超时机制正确工作,及时检测到超时连接
|
|
|
|
|
|
|
|
#### 3. 缓冲区重置时机不当
|
|
|
|
- **问题**:只有在 `EndOfMessage` 为 true 时才重置缓冲区
|
|
|
|
- **修复**:在消息完整处理后立即重置缓冲区
|
|
|
|
- **影响**:避免缓冲区累积过多数据,提高内存使用效率
|
|
|
|
|
|
|
|
#### 4. 异常处理不完善
|
|
|
|
- **问题**:缺少对 WebSocket 连接状态的检查,没有处理连接意外断开的情况
|
|
|
|
- **修复**:添加连接状态检查和详细的异常处理机制
|
|
|
|
- **影响**:提高系统稳定性,避免因连接异常导致的崩溃
|
|
|
|
|
|
|
|
#### 5. 资源泄漏风险
|
|
|
|
- **问题**:缓冲区没有正确释放,异常情况下可能导致资源泄漏
|
|
|
|
- **修复**:使用 `using` 语句确保缓冲区正确释放
|
|
|
|
- **影响**:防止内存泄漏,提高资源管理效率
|
|
|
|
|
|
|
|
### 技术改进
|
|
|
|
|
|
|
|
#### 1. 连接状态验证
|
|
|
|
- 在处理消息前检查 WebSocket 连接状态
|
|
|
|
- 及时发现并处理异常连接状态
|
|
|
|
|
|
|
|
#### 2. 消息大小验证
|
|
|
|
- 在处理消息前验证消息大小是否超过限制
|
|
|
|
- 防止过大消息导致的内存问题
|
|
|
|
|
|
|
|
#### 3. 通道状态检查
|
|
|
|
- 在写入消息前检查通道是否已关闭
|
|
|
|
- 避免向已关闭的通道写入数据
|
|
|
|
|
|
|
|
#### 4. 增强的日志记录
|
|
|
|
- 添加更详细的调试和错误日志
|
|
|
|
- 便于问题排查和性能监控
|
|
|
|
|
|
|
|
#### 5. 资源管理优化
|
|
|
|
- 使用 `using` 语句自动管理缓冲区生命周期
|
|
|
|
- 确保异常情况下资源也能正确释放
|
|
|
|
|
|
|
|
### 性能影响
|
|
|
|
- 提高并发处理能力,避免连接间的数据竞争
|
|
|
|
- 减少内存泄漏风险,提高系统稳定性
|
|
|
|
- 优化超时检测机制,及时释放无效连接
|
|
|
|
- 改进异常处理,减少系统崩溃概率
|