当前位置: 首页 > 网络应用技术

Netty的整体结构是什么?

时间:2023-03-07 18:32:41 网络应用技术

  在官方网站上,给出了图片,图片如下:

  上图取自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阅读和写作操作;通道围栏的有序排列。