Netty 学习笔记
更新: 7/22/2025 字数: 0 字 时长: 0 分钟
1. Netty 简介
Netty 是一个异步的、事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
1.1. 为什么选择 Netty
- 高性能:基于 Java NIO,提供了非阻塞的、异步的 I/O 模型,性能远超传统的阻塞 I/O。
- 易于使用:封装了复杂的 NIO 操作,提供了简单易用的 API。
- 功能强大:内置了对多种协议(如 HTTP, WebSocket, Protobuf)的支持,并且易于扩展。
- 社区活跃:拥有庞大而活跃的社区,文档齐全,遇到问题容易找到解决方案。
2. 核心组件
2.1. Channel(通道)
- 介绍:网络通信的载体,代表了一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或多个不同 I/O 操作的程序组件)的开放连接。
- 常用实现:
NioSocketChannel
:用于客户端的 TCP 连接。NioServerSocketChannel
:用于服务端的 TCP 连接。
2.2. EventLoop(事件循环)
- 介绍:处理连接的生命周期内所发生的事情。一个
EventLoop
由一个线程驱动,处理多个Channel
上的 I/O 事件。 EventLoopGroup
:EventLoop
的分组,通常一个 Netty 应用会有两个EventLoopGroup
,一个用于接收进来的连接(boss group),另一个用于处理被接收连接的流量(worker group)。
2.3. ChannelHandler(通道处理器)
- 介绍:处理 I/O 事件或拦截 I/O 操作,并将其转发到其
ChannelPipeline
(通道管道)中的下一个处理程序。 - 常用适配器:
ChannelInboundHandlerAdapter
:处理入站 I/O 事件。ChannelOutboundHandlerAdapter
:处理出站 I/O 操作。
2.4. ChannelPipeline(通道管道)
- 介绍:为
Channel
提供了一个容器,用于存放和组织ChannelHandler
。每个Channel
都有自己的ChannelPipeline
。
2.5. Bootstrap & ServerBootstrap
Bootstrap
:用于客户端或无连接协议的启动和配置。ServerBootstrap
:用于服务器端的启动和配置。
3. Netty 模型
Netty 采用了经典的 Reactor 模型。
- 单 Reactor 单线程:一个线程处理所有的 I/O 操作,包括连接、读写等。实现简单,但性能有限。
- 单 Reactor 多线程:一个 Reactor 线程负责监听和接受连接,然后将建立的连接交给一个 worker 线程池来处理读写。
- 主从 Reactor 多线程:一个主 Reactor 负责监听和接受连接,然后将连接分配给一个从 Reactor,每个从 Reactor 有自己的线程池来处理读写。这是 Netty 推荐使用的模型。