网络通讯系列
第五章 【网络通讯】【详细场景下的Demo示例(五)】
第四章 【网络通讯】【DotNetty实现(四)】
第三章 【网络通讯】【SuperSocket实现(三)】
第二章 【网络通讯】【Socket实现(二)】
第一章 【网络通讯】【通讯协议(一)】
前言
介绍使用DotNetty实现网络通讯。
一、程序设计
使用第三方库DotNetty来实现上位机客户端。
官网:https://github.com/Azure/DotNetty/
可下载源码(如果无法登上github下载,可在评论区留言,有需要我再上传源码资料)
关键字:高性能、易用性
DotNetty的整体架构可以分为以下四个部分:
Channel:通道是业务逻辑和网络逻辑之间的桥梁。在DotNetty中,所有的网络数据都通过Channel来进行传输。
EventLoop:事件循环是一个单独的线程,用来处理特定类型的事件。每个EventLoop都会绑定一个Selector,用于监听Channel中感兴趣的事件。当事件发生时,该EventLoop会被唤醒来处理该事件。
ChannelPipeline:通道管道是一系列的处理器链,用于处理输入和输出的数据流。在DotNetty中,所有的数据都经过这个管道,在这个管道上可以添加多个处理器来实现业务逻辑。
ChannelHandlerContext:通道处理器上下文包含了当前通道的所有状态信息,每个ChannelHandlerContext都与一个EventLoop相关联。在处理业务逻辑时,可以通过ChannelHandlerContext来发送数据、获取当前通道的状态等。
在DotNetty中,还有许多组件模块,其中比较重要的有:
Transport:传输层模块,用于处理不同协议的网络连接。
Codec:编解码模块,用于处理消息的编码和解码。
Handler:处理器模块,用于实现具体的业务逻辑。
Bootstrap:启动器模块,用于配置和启动应用程序。
怎么选择架构和组件呢?需要回顾第一章,了解我们的需求是什么?
接收的是16进制字节、前面2个字节是接收内容的长度,协议规定一条指令最大1Kb即1024字节,我们可以通道Bootstrap来配置这个解析的规则,然后通过通道ChannelHandlerContext与EventLoop相关联实现接收数据,通过Channel实现数据发送。
在这里我们用到的是
要实现客户端,我们需要设计三个接口、一个事件、两个类
接口分别是连接服务器、断连服务器、发送服务器内容;
事件是接收服务器内容事件;
实现类分为两个,
一个是用于接收内容的通道类;
一个是实现接口和事件内容的客户端类,包含解析规则。
后续优化,在客户端中实现对连接多个服务器需要有多个客户端的管理、解决连接不存在IP的服务器时时间过长问题(Ping功能)等等,这个会在第五章中的Demo实例中有完整解决方案资源可下载。
二、代码
需要添加的NuGet程序包是:
<PackageReference Include="DotNetty.Handlers" Version="0.7.6" />
通道处理类
/// <summary>
/// Tcp通道处理
/// </summary>
internal class TcpChannelHandler : SimpleChannelInboundHandler<object>
{
private TcpSocketClient tcpSocketClient;
/// <summary>
/// Tcp
/// </summary>
/// <param name="client">client</param>
public TcpChannelHandler(TcpSocketClient client)
{
tcpSocketClient = client;
}
/// <summary>
/// 通道连接后调用
/// </summary>
/// <param name="context">上下文</param>
public override void ChannelActive(IChannelHandlerContext context)
{
tcpSocketClient.Client = context.Channel.Id.AsShortText();
tcpSocketClient.Connected = true;
}
/// <summary>
/// 通道读取完成
/// </summary>
/// <param name="context">上下文</param>
public override void ChannelReadComplete(IChannelHandlerContext context)
{
context.Flush();
}

最低0.47元/天 解锁文章
5118

被折叠的 条评论
为什么被折叠?



