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

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

一、 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 的线程模型 :


image.png






二、 Netty 案例需求


需求 : 简单的功能 ;



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


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





目录
相关文章
|
17天前
|
存储 NoSQL Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
29 1
|
30天前
线程CPU异常定位分析
【10月更文挑战第3天】 开发过程中会出现一些CPU异常升高的问题,想要定位到具体的位置就需要一系列的分析,记录一些分析手段。
53 0
|
3月前
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
|
1月前
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
40 0
|
2月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
2月前
|
并行计算 API 调度
探索Python中的并发编程:线程与进程的对比分析
【9月更文挑战第21天】本文深入探讨了Python中并发编程的核心概念,通过直观的代码示例和清晰的逻辑推理,引导读者理解线程与进程在解决并发问题时的不同应用场景。我们将从基础理论出发,逐步过渡到实际案例分析,旨在揭示Python并发模型的内在机制,并比较它们在执行效率、资源占用和适用场景方面的差异。文章不仅适合初学者构建并发编程的基础认识,同时也为有经验的开发者提供深度思考的视角。
|
3月前
|
存储 监控 Java
|
3月前
|
安全 Java 开发者
Swing 的线程安全分析
【8月更文挑战第22天】
58 4
|
3月前
|
Java 数据库连接 数据库
当线程中发生异常时的情况分析
【8月更文挑战第22天】
95 4
|
3月前
|
安全 Java 程序员
线程安全与 Vector 类的分析
【8月更文挑战第22天】
42 4