image.png

1. 网络通信层

网络通信层的职责是执行网络I/O操作。支持多种网络协议和I/O模型的连接操作。
当网络数据读取到内核缓冲区后,会触发各种网络事件,这些网络事件会分发给事件调度层来处理。
核心组件:BootStrap、ServerBootStrap、Channel。
Bootstrap:负责整个Netty程序的启动、初始化、服务器连接等过程,它相当于一条主线,串联Netty的其他核心组件。
Bootstrap用于客户端的引导;ServerBootstrap用于服务端的引导。
两者的区别:Bootstrap用于连接远端服务器,只绑定一个EventLoopGroup,而ServerBootstrap则用于服务端启动绑定本地端口,会绑定两个EventLoopGroup,这两个EventLoopGroup通常称为Boss和Worker。
Boss不停地接收新的连接,然后将连接分配给一个个Worker处理连接。
image.png
Channel:通道,提供基本的IO操作API,如register、bind、connect、read、write、flush等。
image.png

2. 事件调度层

事件调度层职责是通过Reactor线程模型对各种事件进行聚合处理,通过Selector主循环线程集成多种事件(I/O事件、信号事件、定时事件等),实际的业务处理逻辑是交由服务编排层中相关的Handler完成。

事件调度层核心组件:EventLoopGroup、EventLoop。

EventLoopGroup是一个线程池,负责接收I/O请求,并分配线程执行处理请求。
每个EventLoop负责处理多个Channel,同一Channel只对应一个线程。

主从多线程模型:EventLoopGroup 包含多个 EventLoop,Boss 是主 Reactor,Worker 是从 Reactor,它们分别使用不同的 EventLoopGroup,主 Reactor 负责新的网络连接 Channel 创建,然后把 Channel 注册到从 Reactor。

3. 服务编排层

服务编排层职责是负责组装各类服务,它是Netty的核心处理链,用以实现网络事件的动态编排和有序传播。

服务编排层核心组件:ChannelPipeline、ChannelHandler、ChannelHandlerContext。

ChannelPipeline,维护一个ChannelHandler实例的双向链表,当I/O读写事件触发时,ChannelPipeline会依次调用ChannelHandler列表对Channel的数据进行拦截和处理。

ChannelPipeline是线程安全的,每个新的Channel对应绑定一个新的ChannelPipeline,一个ChannelPipeline关联一个EventLoop,一个EventLoop仅绑定一个线程。

ChannelPipeline 中包含入站 ChannelInboundHandler 和出站 ChannelOutboundHandler 两种处理器,客户端和服务端一次完整的请求应答过程可以分为三个步骤:客户端出站(请求数据)、服务端入站(解析数据并执行业务逻辑)、服务端出站(响应结果)。

image.png
每创建一个 Channel 都会绑定一个新的 ChannelPipeline,ChannelPipeline 中每加入一个 ChannelHandler 都会绑定一个 ChannelHandlerContext。

4. 流程梳理

image.png