一、Netty 的整体结构
在 Netty
的官网中,给出了一张图,图片如下:
上图摘自 Netty 官网首页。
这就是 Netty 的模块划分图,可以清晰的看出,一共分为三个模块:
Core 核心层
;Protocol Support 协议支持层
;Transport Services 传输服务层
。
可以看出,Netty 的模块设计具备较高的通用性和可扩展性。
1. Core 核心层
Core 核心层
包含了 Netty 最为核心的功能,提供了底层网络通信的通用抽象和实现,包括可扩展的事件模型、通用的通信 API、支持零拷贝的 ByteBuf 等。
2. Protocol Support 协议支持层
协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、SSL、Protobuf、压缩、大文件传输、WebSocket、文本、二进制
等主流协议,此外 Netty 还支持自定义应用层协议。
Netty 丰富的协议支持降低了用户的开发成本,基于 Netty 我们可以快速开发 HTTP、WebSocket 等服务。
3. Transport Service 传输服务层
传输服务层提供了网络传输能力的定义和实现方法。它支持 Socket、HTTP 隧道、虚拟机管道等传输方式。
Netty 对 TCP、UDP 等数据传输做了抽象和封装,用户可以更聚焦在业务逻辑实现上,而不必关系底层数据传输的细节。
二、Netty 逻辑架构
下图是 Netty 的逻辑处理架构。Netty 的逻辑处理架构为典型网络分层架构设计,共分为网络通信层、事件调度层、服务编排层
,每一层各司其职。
1. 网络通信层
网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O 模型的连接操作。当网络数据读取到内核缓冲区后,会触发各种网络事件,这些网络事件会分发给事件调度层进行处理。
网络事件有连接事件、读事件、写事件等。
网络通信层的核心组件包含 BootStrap、ServerBootStrap、Channel 三个组件。
- BootStrap & ServerBootStrap
Bootstrap
是“引导”的意思,它主要负责整个 Netty 程序的启动、初始化、服务器连接等过程,它相当于一条主线,串联了 Netty 的其他核心组件。
Netty 中的引导器共分为两种类型:一个为用于客户端引导的 Bootstrap,另一个为用于服务端引导的 ServerBootStrap,它们都继承自抽象类 AbstractBootstrap
。
Bootstrap
和 ServerBootStrap
十分相似,两者非常重要的区别在于 Bootstrap
可用于连接远端服务器,只绑定一个 EventLoopGroup
。而 ServerBootStrap
则用于服务端启动绑定本地端口,会绑定两个 EventLoopGroup
,这两个 EventLoopGroup 通常称为 Boss 和 Worker。
ServerBootStrap 中的 Boss 和 Worker 是什么角色呢?它们之间又是什么关系?这里的 Boss 和 Worker 可以理解为“老板”和“员工”的关系。每个服务器中都会有一个 Boss,也会有一群做事情的 Worker。Boss 会不停地接收新的连接,然后将连接