在官方网站上,给出了图片,图片如下:
上图取自Netty官方网站的主页。
这是Netty模块的划分。可以清楚地看出,总共三个模块分为三个模块:
可以看出,Netty的模块设计具有很高的多功能性和可扩展性。
它包含Netty的核心功能,该功能提供了基础网络通信的共同抽象和实现,包括可扩展事件模型,通用通信API和支持零副本的Bytebuf。
协议支持层基本上涵盖了主流协议的编码实现,例如主流协议,Netty还支持自定义应用程序层协议。
Netty的丰富协议支持用户的开发成本。基于Netty,我们可以快速开发HTTP和WebSocket等服务。
传输服务层提供了网络传输能力的定义和实现方法。它支持套接字,HTTP隧道,虚拟机管道和其他传输方法。
Netty已经抽象和封装了数据传输,例如TCP和UDP。用户可以更多地关注业务逻辑实施,而无需关联基础数据传输的详细信息。
下图是Netty的逻辑处理体系结构。Netty的逻辑处理体系结构是典型的网络分层架构设计,将其分为每一层。
网络通信层的责任是执行网络I/O的操作。IT支持多个网络协议和I/O模型的连接操作。当网络数据读取内核缓冲区时,将触发各种网络事件,并且这些网络事件将分配到用于处理的事件调度层。
网络事件包括连接事件,阅读事件,写作事件等。
网络通信层的核心组件包括三个组件:Bootstrap,ServerBootstrap和Channel。
它的意思是“指导”。它主要负责整个Netty程序的开始,初始化和服务器连接。它等同于主线,并连接Netty的其他核心组件。
Netty中的指南分为两种类型:一种是用于客户端的引导程序,另一个是服务器的ServerBootstrap。他们都继承了抽象类。
与非常相似的相似之处,两者之间的非常重要的区别是它可用于连接到远程服务器,并且仅绑定一个。它用于启动用于启动本地端口的本地端口,该端口将绑定两个。这两个事件集团通常称为老板和工人。
老板和工人在Serverbootstrap中有什么角色?他们之间有什么关系?可以将这里的老板和工人理解为“老板”和“员工”之间的关系。每个服务器中都有一个老板,并且会有一个做事的工人小组会不断接收新的联系,然后将连接分配给工人处理连接。
在相应的模型中,相应的模型。
总流程图放置在此处。Source:https://gee.cs.oswego.edu/dl/cpjslides/nio.pdf
总而言之,客户端使用指导类,服务器使用指南类。
使用Bootstrap组件,我们可以更方便地配置并启动Netty应用程序。它是整个Netty的入口,它连接了Netty的所有核心组成部分的初始化。
字面意思是“渠道”,这是网络通信的载体。
为网络I/O操作提供了基本的API,例如等。
Netty本身实施的渠道基于JDK NiO渠道。与JDK Nio相比,Netty的通道提供了更高的抽象水平,同时阻止了底部插座的复杂性,从而使通道更强大。当您使用Netty时,您无需直接处理Java插座类。
下图是频道家族的地图。它是整个家庭的基类,每个家庭都代表不同的I/O模型和协议类型。常用的频道实现类是:
注意:
渠道将具有多种状态,例如连接建立,连接注册,数据阅读和写作,连接破坏等。
常见状态相应的事件如下:
事件调度层的责任是通过反应堆线程模型汇总各种事件,并通过选择器主流循环线程集成多个事件(I/O事件,信号事件,正时事件等)。图层已完成。
事件调度层的核心组件包括EventloopGroup,Eventloop。
EventLoopGroup本质上是一个线程池,主要负责接收I/O请求和分配线程以执行处理请求。
EventLoopGroup类图如下:
我们发现它继承了执行程序类,该类证明它是一个线程池。
然后,这表明由IT管理的事件循环是一个逐一管理的,这负责AlloColoopGroup分配Eventloop来处理事件。
从上图,我们可以总结事件卢比,Eventloop和渠道的某些关系。
下图是EventloopGroup的家族地图。可以看到Netty提供了EventloopGroup的各种实现,EventLoop是EventloopGroup的子接口,因此您也可以将Eventloop理解为Eventloopgroup,但它仅包含一个Eventloop。
实现类是Netty中最推荐的线程模型。
NioEventloopGroup继承在MultineReadeventloopGroup中。它是根据NIO模型开发的。它可以将NioEventloopGroup视为线程池。每个线程负责处理多个通道,同一通道仅对应于一个线程。
EventLoopGroup是Netty的核心处理引擎,那么EventloopGroup和Reactor线程模型之间的关系是什么?
实际上,EventLoopGroup是Netty反应器线程模型的特定实现方法。Netty可以通过创建不同的EventloopGroup参数配置来支持反应堆的三个线程模型:
服务和行层的职责负责组装各种服务。它是Netty的核心处理链,可以实现动态安排和网络事件的有序通信。
服务编辑层的核心组件包括ChannelPipeline,ChannelHandler,ChannelHandlerContext。
它是Netty的核心布置组成部分。它负责组装各种频道手。ChannelHandler完成了实际数据的编解码和处理操作。
ChannelPipeline可以理解为ChannelHandler的实例列表 - 通过两条链接的列表将不同的频道Handler链接在一起。当I/O读取和编写事件触发器时,ChannelPipeline将调用ChannelHandler列表以拦截和Process Channel的数据。
因为每个新通道都对应于一个新的ChannelPipeline.A ChannelPipeeline关联Eventloop,并且EventLoop只能绑定线程。
ChannelPipeline和ChannelHandler都是自定义的组件。开发人员可以通过这两个核心组件来控制通道数据操作的控制。LET的介绍一下ChannelPipeline的结构图:
从上图可以看出,ChannelPipeline包含两个处理器:ChannelInboundHandler和Station ChannelOutBoundHandler。我们将Netty的两个概念与客户端和服务器的数据接收过程相结合。
客户端和服务器都有自己的ChannelPipeline。以客户端为例,数据将从客户端发送到服务器。该过程被召集出站,反之亦然。数据输入将由一系列的InboundHandler处理,然后该站将以相反的方向完成。
我们经常使用的编码编码器是退出操作,而解码器是输入操作。接收客户端数据后,服务器需要在通过Encoder通知客户端之前通过解码器输入处理。请求响应过程可以分为三个步骤:客户端外(请求数据),服务终端条目(分析数据和执行业务逻辑)和服务端口(响应结果)。
下图描述了通道和通道围栏之间的关系。从图可以看出,每个通道都会绑定新的通道管线。每个ChannelHandler都会在ChannelPipeLine中添加到ChannelHandler中。
可以看出,ChannelPipeline,ChannelHandlerContext和ChannelHandler的三个组件的三个组件之间的关系密切相关。
ChannelHandlerContext用于保留ChannelHandler的上下文,我们可以通过ChannelHandlerContext了解ChannelPipeline和ChannelHandler之间的关系。
ChannelHandlerContext可以实现ChannelHandler之间的交互。ChannelHandlerContext包含ChannelHandler的生命周期中的所有事件,例如连接,绑定,读取,冲洗,写,关闭,等等。
此外,您可以想象这样的场景。如果每个ChannelHandler都需要实现一些通用逻辑,则没有ChannelHandlerContext模型抽象,您是否需要编写很多相同的代码?
Netty组件交互式流程图:
Netty源代码
Netty源代码结构通常与Netty的模块一致:
核心层模块Netty-Common模块是Netty的核心基本软件包,它提供了大量工具,其他模块需要依靠它。在公共模块中,常用的常用工具类包括通用工具类和自定义数据包。
在Netty-Buffer模块中,Netty本身实现的更完整的Bytebuf工具类用于网络通信中的数据向量。
由于人性化的缓冲液API设计,它已成为Java Bytebuffer的理想选择。Bytebuf的动态设计不仅解决了由ByteBuffer固定的长度引起的记忆浪费问题,而且更改了缓冲区的容量。此外,Netty对Bytebuf进行了许多优化,例如CACHE POLING,CompositeByteBuf减少了数据副本。
Netty转向模块主要为基础架构提供了一些分析工具,包括IP地址,主机名,DNS等。
协议支持协议支持图层模块Netty-Codec模块主要负责编解码器工作,并且通过编码解码来实现原始字节数据与业务实体对象之间的转换。
如下图所示,Netty支持大多数行业主流协议的编解码器,例如HTTP,HTTP2,REDIS,XML等,为开发人员节省了很多能量。此外,该模块提供了抽象的编解码器Bytetomerssagecoder和Messagetobyteencoder。通过继承这两个类,我们可以轻松地实现自定义的编解码器逻辑。
NetTy Handler模块主要负责数据处理。Netty中数据处理的一部分本质上是有序处理程序的一系列收集器。NettyHandler模块提供了框中使用的ChannelHandler实现类,例如日志,例如日志,如日志,IP过滤,交通整形手术等。如果您需要这些功能,则只需将相应的ChannelHandler添加到管道中即可。
运输服务传输层模块可以说是数据处理和传输的核心模块。本模块提供了许多非常重要的接口,例如Bootstrap,Channel Handler,ChannelHandler,Eventloop,Eventloop,EventloopGroup,ChannelPipeline,ChannelPipeline等。
其中,Bootstrap负责客户端或服务器的启动工作,包括频道的创建和初始化等。EventLoop负责向注册渠道启动I/O阅读和写作操作;通道围栏的有序排列。