首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )

【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )

作者头像
韩曙亮
发布2023-03-27 20:46:30
发布2023-03-27 20:46:30
1.1K0
举报

文章目录

一、 Netty 线程模型


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 客户端连接事件 ;

  • 建立连接 : 建立服务器与该客户端之间的连接 ;
  • 获取通道 : 获取 套接字通道 ( SocketChannel ) ;
  • 封装通道 : 将 SocketChannel 封装为 NioSocketChannel ;
  • 注册通道 : 将 NioSocketChannel 注册到 WorkerGroup 线程池中的某个 NioEventLoop 中的 Selector 上 ;

③ 任务队列 : 处理任务队列中的其它任务 ;

6 . WorkerGroup 线程池中的线程 NioEventLoop 执行步骤 :

① 监听数据 : 轮询监听客户端的 读 ( Read ) 写 ( Write ) 数据事件 ;

② 处理流程 : 处理该 读 ( Read ) 写 ( Write ) 数据 IO 事件 , 基于之前注册的 NioSocketChannel 处理 IO 事件 ;

③ 任务队列 : 处理任务队列中的其它任务 ;

7 . 管道 ( Pipeline ) : 管道 ( Pipeline ) 包含 通道 ( Channel ) , 通过 管道 ( Pipeline ) 可以获取到对应的 通道 ( Channel ) , 管道 ( Pipeline ) 中维护了很多 处理器 ( Handler ) ;

8 . 下图是 Netty 的线程模型 :

二、 Netty 案例需求


需求 : 简单的功能 ;

① 服务器端 : 监听 8888 端口 , 接收到客户端消息后 , 将消息原路送回 ;

② 客户端 : 向服务器发送 “Hello World” ;

三、 IntelliJ IDEA 引入 Netty 包


引入 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 的依赖库 , 文档 , 源码 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 文章目录
  • 一、 Netty 线程模型
  • 二、 Netty 案例需求
  • 三、 IntelliJ IDEA 引入 Netty 包
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档