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.
306 lines
7.8 KiB
306 lines
7.8 KiB
2 weeks ago
|
# CoreAgent.WebSocketTransport 项目结构说明
|
||
|
|
||
|
## 项目概述
|
||
|
|
||
|
`CoreAgent.WebSocketTransport` 是一个基于 .NET 8.0 的 WebSocket 传输层组件,主要负责转发协议数据给上层应用。该项目采用分层架构设计,提供高性能、可扩展的 WebSocket 通信能力。
|
||
|
|
||
|
## 核心设计理念
|
||
|
|
||
|
### 1. 单一职责原则
|
||
|
- **IWebSocketTransport**: 专注于连接管理
|
||
|
- **IMessageChannel**: 专注于消息队列操作
|
||
|
- **IMessageSerializer**: 专注于消息序列化
|
||
|
- **IMessageMiddleware**: 专注于消息处理逻辑
|
||
|
|
||
|
### 2. 依赖注入
|
||
|
- 所有组件都通过依赖注入容器管理
|
||
|
- 支持配置驱动的服务注册
|
||
|
- 提供灵活的中间件扩展机制
|
||
|
|
||
|
### 3. 异步编程
|
||
|
- 全异步 API 设计
|
||
|
- 支持取消令牌
|
||
|
- 高效的并发处理
|
||
|
|
||
|
## 项目结构
|
||
|
|
||
|
```
|
||
|
CoreAgent.WebSocketTransport/
|
||
|
├── Interfaces/ # 接口定义层
|
||
|
├── Services/ # 服务实现层
|
||
|
├── Models/ # 数据模型层
|
||
|
├── Middleware/ # 中间件层
|
||
|
├── Extensions/ # 扩展方法层
|
||
|
├── Examples/ # 使用示例
|
||
|
├── Dos/ # 文档目录
|
||
|
└── CoreAgent.WebSocketTransport.csproj
|
||
|
```
|
||
|
|
||
|
## 详细组件说明
|
||
|
|
||
|
### 1. Interfaces/ - 接口定义层
|
||
|
|
||
|
#### IWebSocketTransport.cs
|
||
|
- **职责**: WebSocket 连接管理接口
|
||
|
- **功能**:
|
||
|
- 连接状态管理
|
||
|
- 心跳监控
|
||
|
- 连接/断开操作
|
||
|
- **设计原则**: 单一职责,只负责连接生命周期
|
||
|
|
||
|
#### IMessageChannel.cs
|
||
|
- **职责**: 消息通道抽象接口
|
||
|
- **功能**:
|
||
|
- 异步消息读写
|
||
|
- 非阻塞操作支持
|
||
|
- 队列状态监控
|
||
|
- 通道生命周期管理
|
||
|
- **设计原则**: 提供统一的消息队列抽象
|
||
|
|
||
|
#### IMessageChannelManager.cs
|
||
|
- **职责**: 消息通道管理器接口
|
||
|
- **功能**:
|
||
|
- 多通道管理(发送、接收、优先级)
|
||
|
- 通道状态监控
|
||
|
- 批量操作支持
|
||
|
- **设计原则**: 统一管理多个消息通道
|
||
|
|
||
|
#### IMessageSerializer.cs
|
||
|
- **职责**: 消息序列化接口
|
||
|
- **功能**:
|
||
|
- 消息序列化/反序列化
|
||
|
- 支持多种数据格式
|
||
|
- **设计原则**: 解耦序列化逻辑
|
||
|
|
||
|
#### IWebSocketConnection.cs
|
||
|
- **职责**: WebSocket 连接抽象接口
|
||
|
- **功能**:
|
||
|
- 底层连接操作
|
||
|
- 消息发送/接收
|
||
|
- 连接状态管理
|
||
|
- **设计原则**: 封装底层 WebSocket 操作
|
||
|
|
||
|
### 2. Services/ - 服务实现层
|
||
|
|
||
|
#### WebSocketTransport.cs
|
||
|
- **职责**: WebSocket 传输核心实现
|
||
|
- **核心功能**:
|
||
|
- 自动连接管理
|
||
|
- 消息批量发送
|
||
|
- 自动重连机制
|
||
|
- 心跳保活
|
||
|
- 中间件管道处理
|
||
|
- **技术特点**:
|
||
|
- 多任务并发处理
|
||
|
- 信号量控制连接
|
||
|
- 异常恢复机制
|
||
|
- 性能优化(批量发送、内存池)
|
||
|
|
||
|
#### WebSocketConnection.cs
|
||
|
- **职责**: WebSocket 连接实现
|
||
|
- **功能**:
|
||
|
- 底层 WebSocket 操作封装
|
||
|
- 连接状态管理
|
||
|
- 消息收发处理
|
||
|
- **技术特点**:
|
||
|
- 线程安全设计
|
||
|
- 异常处理机制
|
||
|
|
||
|
#### ChannelMessageChannel.cs
|
||
|
- **职责**: 基于 Channel 的消息通道实现
|
||
|
- **功能**:
|
||
|
- 高性能消息队列
|
||
|
- 异步读写操作
|
||
|
- 容量控制
|
||
|
- **技术特点**:
|
||
|
- 使用 System.Threading.Channels
|
||
|
- 支持背压控制
|
||
|
- 内存高效
|
||
|
|
||
|
#### MessageChannelManager.cs
|
||
|
- **职责**: 消息通道管理器实现
|
||
|
- **功能**:
|
||
|
- 多通道协调管理
|
||
|
- 优先级消息处理
|
||
|
- 批量操作优化
|
||
|
- **技术特点**:
|
||
|
- 通道池管理
|
||
|
- 动态容量调整
|
||
|
- 性能监控
|
||
|
|
||
|
#### JsonMessageSerializer.cs
|
||
|
- **职责**: JSON 消息序列化实现
|
||
|
- **功能**:
|
||
|
- JSON 序列化/反序列化
|
||
|
- 错误处理
|
||
|
- 类型安全
|
||
|
- **技术特点**:
|
||
|
- 使用 System.Text.Json
|
||
|
- 支持自定义选项
|
||
|
|
||
|
### 3. Models/ - 数据模型层
|
||
|
|
||
|
#### WebSocketConfig.cs
|
||
|
- **职责**: WebSocket 配置模型
|
||
|
- **配置项**:
|
||
|
- 服务器地址
|
||
|
- 超时设置
|
||
|
- 批量处理参数
|
||
|
- 重连策略
|
||
|
- 队列容量
|
||
|
- 缓存设置
|
||
|
- **特点**:
|
||
|
- 数据验证注解
|
||
|
- 合理的默认值
|
||
|
- 配置绑定支持
|
||
|
|
||
|
### 4. Middleware/ - 中间件层
|
||
|
|
||
|
#### IMessageMiddleware.cs
|
||
|
- **职责**: 消息处理中间件接口
|
||
|
- **功能**:
|
||
|
- 发送消息预处理
|
||
|
- 接收消息后处理
|
||
|
- 条件跳过支持
|
||
|
- **设计原则**: 管道模式,支持链式处理
|
||
|
|
||
|
#### LoggingMiddleware.cs
|
||
|
- **职责**: 日志记录中间件
|
||
|
- **功能**:
|
||
|
- 消息发送日志
|
||
|
- 消息接收日志
|
||
|
- 性能监控
|
||
|
- **特点**: 结构化日志,性能友好
|
||
|
|
||
|
#### CacheMiddleware.cs
|
||
|
- **职责**: 缓存中间件
|
||
|
- **功能**:
|
||
|
- 消息缓存
|
||
|
- 重复消息检测
|
||
|
- TTL 管理
|
||
|
- **特点**: 内存缓存,可配置 TTL
|
||
|
|
||
|
### 5. Extensions/ - 扩展方法层
|
||
|
|
||
|
#### WebSocketTransportExtensions.cs
|
||
|
- **职责**: 依赖注入扩展
|
||
|
- **功能**:
|
||
|
- 服务注册
|
||
|
- 配置绑定
|
||
|
- 中间件注册
|
||
|
- 工厂模式支持
|
||
|
- **特点**:
|
||
|
- 流式 API 设计
|
||
|
- 配置驱动
|
||
|
- 灵活的注册方式
|
||
|
|
||
|
### 6. Examples/ - 使用示例
|
||
|
|
||
|
#### CompositionPatternExample.cs
|
||
|
- **职责**: 组合模式使用示例
|
||
|
- **展示内容**:
|
||
|
- 基本使用流程
|
||
|
- 优先级消息处理
|
||
|
- 连接状态监控
|
||
|
- **价值**: 提供最佳实践参考
|
||
|
|
||
|
#### ChannelManagerTestExample.cs
|
||
|
- **职责**: 通道管理器测试示例
|
||
|
- **展示内容**:
|
||
|
- 多通道操作
|
||
|
- 性能测试
|
||
|
- 异常处理
|
||
|
- **价值**: 验证组件功能
|
||
|
|
||
|
## 数据流转架构
|
||
|
|
||
|
```
|
||
|
上层应用
|
||
|
↓
|
||
|
IMessageChannelManager (消息通道管理器)
|
||
|
↓
|
||
|
WebSocketTransport (传输层)
|
||
|
↓
|
||
|
IMessageMiddleware[] (中间件管道)
|
||
|
↓
|
||
|
IMessageSerializer (序列化)
|
||
|
↓
|
||
|
IWebSocketConnection (连接层)
|
||
|
↓
|
||
|
WebSocket 服务器
|
||
|
```
|
||
|
|
||
|
## 核心特性
|
||
|
|
||
|
### 1. 高性能设计
|
||
|
- **批量发送**: 支持消息批量处理,减少网络开销
|
||
|
- **内存池**: 使用 ArrayPool 减少内存分配
|
||
|
- **异步处理**: 全异步 API,支持高并发
|
||
|
- **背压控制**: 通过 Channel 实现背压机制
|
||
|
|
||
|
### 2. 可靠性保障
|
||
|
- **自动重连**: 连接断开时自动重连
|
||
|
- **心跳保活**: 定期发送心跳包
|
||
|
- **异常恢复**: 完善的异常处理机制
|
||
|
- **状态监控**: 实时连接状态监控
|
||
|
|
||
|
### 3. 可扩展性
|
||
|
- **中间件架构**: 支持自定义消息处理逻辑
|
||
|
- **配置驱动**: 灵活的配置管理
|
||
|
- **依赖注入**: 松耦合的组件设计
|
||
|
- **接口抽象**: 易于扩展和替换
|
||
|
|
||
|
### 4. 易用性
|
||
|
- **流式 API**: 简洁的注册和使用方式
|
||
|
- **详细文档**: 完整的代码注释和示例
|
||
|
- **类型安全**: 强类型设计,编译时检查
|
||
|
- **错误处理**: 友好的错误信息和处理
|
||
|
|
||
|
## 使用方式
|
||
|
|
||
|
### 1. 服务注册
|
||
|
```csharp
|
||
|
// 使用配置文件
|
||
|
services.AddWebSocketTransport(configuration, "WebSocket");
|
||
|
|
||
|
// 使用委托配置
|
||
|
services.AddWebSocketTransport(options =>
|
||
|
{
|
||
|
options.Url = "wss://example.com/ws";
|
||
|
options.TimeoutMs = 30000;
|
||
|
options.MaxBatchSize = 100;
|
||
|
});
|
||
|
```
|
||
|
|
||
|
### 2. 基本使用
|
||
|
```csharp
|
||
|
// 注入服务
|
||
|
var transport = serviceProvider.GetRequiredService<IWebSocketTransport>();
|
||
|
var channelManager = serviceProvider.GetRequiredService<IMessageChannelManager>();
|
||
|
|
||
|
// 连接服务器
|
||
|
await transport.ConnectAsync();
|
||
|
|
||
|
// 发送消息
|
||
|
await channelManager.SendChannel.WriteAsync("Hello World");
|
||
|
|
||
|
// 接收消息
|
||
|
while (channelManager.ReceiveChannel.TryRead(out var message))
|
||
|
{
|
||
|
Console.WriteLine($"收到消息: {message}");
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## 技术栈
|
||
|
|
||
|
- **.NET 8.0**: 目标框架
|
||
|
- **System.Threading.Channels**: 高性能消息队列
|
||
|
- **System.Text.Json**: JSON 序列化
|
||
|
- **Microsoft.Extensions.DependencyInjection**: 依赖注入
|
||
|
- **Microsoft.Extensions.Configuration**: 配置管理
|
||
|
- **Microsoft.Extensions.Logging**: 日志记录
|
||
|
- **Microsoft.Extensions.Caching.Memory**: 内存缓存
|
||
|
|
||
|
## 总结
|
||
|
|
||
|
`CoreAgent.WebSocketTransport` 是一个设计精良的 WebSocket 传输层组件,通过分层架构、依赖注入、中间件模式等设计模式,提供了高性能、可靠、可扩展的 WebSocket 通信能力。该项目特别适合需要稳定 WebSocket 连接的应用场景,如实时通信、数据同步、消息推送等。
|