Netty - Snet Docs

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 使用通道处理器管道进行协议处理。默认管道支持:

  1. 帧解码器 -- 将字节流分割为消息帧
  2. 字符串编码器/解码器 -- 在字节缓冲区和字符串之间进行转换
  3. 业务处理器 -- 将消息分发到应用层

对于自定义协议,您可以扩展管道,添加额外的帧解析、编码和解码处理器。

支持的操作

操作 方法 描述
连接 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(); // 尝试重连
    }
};

另请参阅