
1 . Netty 中的线程池 : Netty 中有两组线程池 , 分别是 BossGroup 线程池 和 WorkerGroup 线程池 ;
① BossGroup 线程池 : 负责客户端的连接 ;
② WorkerGroup 线程池 : 负责客户端连接的数据读写 ;
顾名思义 , 这两个线程池中存放线程 , 这两个线程池是 NioEventLoopGroup 子类 , NioEventLoop 就是其中的线程 ;
2 . NIO 事件循环组 ( NioEventLoopGroup ) 简介 :
① NioEventLoopGroup 基类 : BossGroup 和 WorkerGroup 都是 NioEventLoopGroup 的派生类 ;
② NioEventLoopGroup 作用 : 代表 NIO 事件循环组 , 这个组中有多个事件循环 , 每个事件循环都是一个 NioEventLoop ;
3 . NIO 事件循环 ( NioEventLoop ) 简介 :
① NIO 事件循环 ( NioEventLoop ) 本质 : 表示线程 , 在该线程中循环处理任务 ;
② NIO 事件循环 ( NioEventLoop ) 作用 : 每个 NIO 事件循环 ( NioEventLoop ) 都有 Selector 监听相应的客户端请求事件 ;
4 . NIO 事件循环组 ( NioEventLoopGroup ) 与 NIO 事件循环 ( NioEventLoop ) 对应关系 : 在一个 NIO 事件循环组 ( NioEventLoopGroup ) 中可以有 多个 NIO 事件循环 ( NioEventLoop ) , 在 Netty 中这个个数可以使用代码指定 ;
5 . BossGroup 线程池中的线程 NioEventLoop 执行步骤 :
① 监听连接 : 轮询监听客户端的 accept 连接请求事件 ;
② 处理流程 : 处理该 accept 客户端连接事件 ;
③ 任务队列 : 处理任务队列中的其它任务 ;
6 . WorkerGroup 线程池中的线程 NioEventLoop 执行步骤 :
① 监听数据 : 轮询监听客户端的 读 ( Read ) 写 ( Write ) 数据事件 ;
② 处理流程 : 处理该 读 ( Read ) 写 ( Write ) 数据 IO 事件 , 基于之前注册的 NioSocketChannel 处理 IO 事件 ;
③ 任务队列 : 处理任务队列中的其它任务 ;
7 . 管道 ( Pipeline ) : 管道 ( Pipeline ) 包含 通道 ( Channel ) , 通过 管道 ( Pipeline ) 可以获取到对应的 通道 ( Channel ) , 管道 ( Pipeline ) 中维护了很多 处理器 ( Handler ) ;
8 . 下图是 Netty 的线程模型 :

需求 : 简单的功能 ;
① 服务器端 : 监听 8888 端口 , 接收到客户端消息后 , 将消息原路送回 ;
② 客户端 : 向服务器发送 “Hello World” ;
引入 Netty 包流程
1 . 打开工程结构 ( Project Structure ) 对话框 : 选择 File 菜单 -> Project Structure 选项 ;

2 . 选择导入方式 : 选择 Modules 选项卡 , 右侧选择 Dependencies 选项卡 , 选择右侧的加号 , 点击 2 Library… , 选择 From Maven … 从 Maven 导入 Netty 库 ;

3 . 搜索 Netty 库 : 在弹出的对话框中输入 io.netty:netty-all 内容 , 然后点击右侧的放大镜搜索按钮 ( 搜索很长时间 ) , 选择将依赖库下载到工程的 lib 目录下 , 同时下载源码和文档 ;

4 . 选择一个 Netty 版本 : 选择一个 Netty 版本 , 然后点击 OK 按钮 , 开始下载 , 下载速度很慢 ;

点击 OK 按钮后 , 开始下载 , 下载几十分钟 , 慢慢等 ;

5 . 配置库 : 下载完成后 , 会弹出 Configure Library 界面 , 下面的 3 个 jar 包都选择上 , 点击 OK , 就会在目录下生成 lib 目录 , 该目录下有 Netty 相关的依赖库 , 文档 , 源码 等内容 ;

6 . Netty 库 : 工程目录下的 lib 目录中存放着 Netty 的依赖库 , 文档 , 源码 ;
