Netty TCP 中间件
包名: Snet.Netty | 类: NettyClientOperate | 基类: MqAbstract<NettyClientOperate, NettyClientData.Basics>
基于 DotNetty 库(Netty 的 .NET 移植版本)提供高性能 TCP 消息传递。支持自定义协议帧解析、编码器/解码器管道和长生命周期持久 TCP 连接。
概述
NettyClientOperate 封装了 DotNetty TCP 通道,并在原始 TCP 之上提供基于消息的发布/订阅语义。它继承自 MqAbstract<NettyClientOperate, NettyClientData.Basics> 并实现了 IMq。
当您需要通过自定义协议处理进行原始 TCP 消息传递时,这是正确的选择 -- 例如,与嵌入式设备、专有 PLC 接口或使用自定义有线协议的遗留系统通信。
安装
dotnet add package Snet.Netty
快速开始
using Snet.Netty.client;
var client = new NettyClientOperate(new NettyClientData.Basics
{
IpAddress = "127.0.0.1",
Port = 6688
});
await client.OnAsync();
// 绑定事件再消费
client.OnDataEventAsync += async (sender, e) =>
{
if (e.Status)
Console.WriteLine($"接收到数据: {e.ResultData}");
else
Console.WriteLine($"消费失败: {e.Message}");
};
await client.ConsumeAsync("command");
// 生产消息(可选)
await client.ProduceAsync("command", "STATUS", System.Text.Encoding.UTF8);
// 后续:取消消费
// await client.UnConsumeAsync("command");
// await client.DisposeAsync();
配置
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
IpAddress |
string | "127.0.0.1" |
目标服务器 IP 地址 |
Port |
int | 6688 | 目标服务器 TCP 端口 |
SslFilePath |
string? | — | SSL 证书文件路径 |
SslFilePassword |
string? | — | SSL 证书文件密码 |
TaskNumber |
int | 5 | 并发任务数量 |
ResponseType |
enum | Content | 响应类型 |
协议管道
DotNetty 使用通道处理器管道进行协议处理。默认管道支持:
- 帧解码器 -- 将字节流分割为消息帧
- 字符串编码器/解码器 -- 在字节缓冲区和字符串之间进行转换
- 业务处理器 -- 将消息分发到应用层
对于自定义协议,您可以扩展管道,添加额外的帧解析、编码和解码处理器。
支持的操作
| 操作 | 方法 | 描述 |
|---|---|---|
| 连接 | OnAsync() |
建立到服务器的 TCP 连接 |
| 断开 | OffAsync() |
关闭 TCP 连接 |
| 发送 | ProduceAsync(topic, string, Encoding?) |
通过 TCP 发送字符串消息 |
| 发送 | ProduceAsync(topic, byte[]) |
通过 TCP 发送原始字节 |
| 接收 | ConsumeAsync(topic) |
开始监听主题/通道上的消息 |
| 停止接收 | UnConsumeAsync(topic) |
停止监听主题/通道上的消息 |
事件
| 事件 | 签名 | 描述 |
|---|---|---|
OnDataEvent |
EventHandler<EventDataResult> |
从 TCP 连接收到数据时触发 |
OnDataEventAsync |
EventHandlerAsync<EventDataResult> |
OnDataEvent 的异步变体 |
OnInfoEvent |
EventHandler<EventInfoResult> |
收到连接状态和信息消息时触发 |
OnInfoEventAsync |
EventHandlerAsync<EventInfoResult> |
OnInfoEvent 的异步变体 |
OnLanguageEvent |
EventHandler<EventLanguageResult> |
语言变更时触发 |
OnLanguageEventAsync |
EventHandlerAsync<EventLanguageResult> |
OnLanguageEvent 的异步变体 |
重连行为
NettyClientOperate 支持连接断开时自动重连:
// 事件驱动的重连
client.OnInfoEventAsync += async result =>
{
if (result.Message.Contains("disconnected"))
{
await Task.Delay(2000);
await client.OnAsync(); // 尝试重连
}
};
