目录
1.什么是 Netty?
Netty 是一个基于 Java NIO(非阻塞 IO)的高性能、异步事件驱动的网络通信框架。 它极大地简化了 TCP/UDP/HTTP 等协议的开发,屏蔽了底层复杂的 NIO 调度细节。
一句话总结:
Netty = Java 高性能网络通信神器。
2.为什么选择 Netty?
(1)对比传统开发模式
维度 | BIO | 原生 NIO | Netty |
编程复杂度 | 简单但阻塞 | 复杂(手动管理) | 简单易用 |
并发能力 | 1线程/连接 | 单线程多连接 | 百万级并发 |
内存管理 | 易泄漏 | 需手动管理 | 内存池自动管理 |
协议支持 | 需自行实现 | 基础协议不足 | 内置多种协议 |
社区生态 | 无 | 调试困难 | 成熟生态(Dubbo等) |
(2)解决 NIO 的痛点
-
空轮询问题:通过 EventLoop 优化事件监听逻辑,减少 CPU 占用。
-
内存泄漏:ByteBuf 的引用计数机制确保内存及时释放。
-
线程管理:EventLoopGroup 自动管理线程池,避免资源竞争。
(3)主要优点
-
超高并发支持(百万连接不是梦)
-
异步非阻塞(Reactor 多线程模型)
-
零拷贝(Zero-copy,性能优化)
-
自定义协议支持(不仅限 HTTP)
-
内存管理优化(ByteBuf)
-
可扩展(Pipeline+Handler 组合机制)
-
稳定可靠(大厂实战检验:Dubbo、RocketMQ、Elasticsearch 都用 Netty)
3.Netty 核心架构
Netty 本质上是围绕着Reactor 事件驱动模型进行设计的。
(1)核心组件(超重要!)
组件 | 作用 |
Channel | 网络连接的抽象(类似 Socket),支持读写操作。 |
EventLoop | 事件循环线程,负责处理 I/O 事件(如读写、连接)。 |
EventLoopGroup | 线程池,管理多个 EventLoop,分为 BossGroup(接收连接)和 WorkerGroup(处理 I/O)。 |
ChannelPipeline | 处理链,按顺序执行 ChannelHandler,实现业务逻辑解耦。 |
ChannelHandler | 处理入站/出站事件(如数据解码、业务处理)。 |
ByteBuf | Netty 的内存管理类,替代 Java 的 ByteBuffer,支持零拷贝和内存池复用。 |
Netty 的数据流转,基本就是:Socket ➔ Channel ➔ Pipeline ➔ 一组 Handler 处理数据
(2) 核心模型:Reactor 模型
-
Netty 实现:主从 Reactor 模型(多线程 Reactor)。
-
主 R
-