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.

4.4 KiB

修改记录

2024-12-19 ProtocolMessageHandler 优化

修改文件

  • X1.WebSocket/Handlers/ProtocolMessageHandler.cs

主要改进

1. 方法重命名

  • ProtocolMessageOutputProcessProtocolMessageAsync
  • 更符合方法命名规范,清晰表达方法功能

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 语句自动管理缓冲区生命周期
  • 确保异常情况下资源也能正确释放

性能影响

  • 提高并发处理能力,避免连接间的数据竞争
  • 减少内存泄漏风险,提高系统稳定性
  • 优化超时检测机制,及时释放无效连接
  • 改进异常处理,减少系统崩溃概率