Netty使用教程
一、Netty 服务端架构
1、组件交互执行流程
- 服务端启动初始化时有 Boss EventLoopGroup 和 Worker EventLoopGroup 两个组件,其中 Boss 负责监听网络连接事件。当有新的网络连接事件到达时,则将 Channel 注册到 Worker EventLoopGroup。
- Worker EventLoopGroup 会被分配一个 EventLoop 负责处理该 Channel 的读写事件。每个 EventLoop 都是单线程的,通过 Selector 进行事件循环。
- 当客户端发起 I/O 读写事件时,服务端 EventLoop 会进行数据的读取,然后通过 Pipeline 触发各种监听器进行数据的加工处理。
- 客户端数据会被传递到 ChannelPipeline 的第一个 ChannelInboundHandler 中,数据处理完成后,将加工完成的数据传递给下一个 ChannelInboundHandler。
- 当数据写回客户端时,会将处理结果在 ChannelPipeline 的 ChannelOutboundHandler 中传播,最后到达客户端。
2、组件名词解释
-
ServerBootstrap
- 作用:Netty 中用于启动服务器的核心类。它负责配置服务端的启动参数,并将事件分发到不同的线程组中
- 功能:
- 配置服务端的监听地址和端口
- 配置
EventLoopGroup
(包括Boss EventLoopGroup
和Worker EventLoopGroup
) - 配置
ChannelPipeline
,即数据处理的逻辑管道 - 启动服务端并开始监听客户端连接
-
EventLoopGroup
-
Boss EventLoopGroup
- 作用:负责处理新连接的建立(Accept 操作)。当客户端请求连接时,
Boss EventLoopGroup
会将其分配给Worker EventLoopGroup
进行后续处理。
- 作用:负责处理新连接的建立(Accept 操作)。当客户端请求连接时,
-
Worker EventLoopGroup
- 作用:负责处理已建立连接的 I/O 操作(读取、写入等)。每个连接会被分配到一个
EventLoop
,由其负责处理该连接的所有 I/O 事件。
- 作用:负责处理已建立连接的 I/O 操作(读取、写入等)。每个连接会被分配到一个
-
-
EventLoop
- 作用:
EventLoop
是EventLoopGroup
的核心单元,负责处理单个线程中的事件循环。 - 功能:
- 监听注册到其上的
Channel
的 I/O 事件 - 执行与这些事件相关的操作(如读取数据、写入数据等)
- 管理
ChannelPipeline
中的ChannelHandler
的执行顺序
- 监听注册到其上的
- 作用:
-
Channel
- 功能:
Channel
是 Netty 中表示网络连接的抽象类,可以是 TCP 连接(SocketChannel
)、UDP 连接(DatagramChannel
)或其他类型的连接
- 功能:
-
ChannelPipeline
- 功能:
ChannelPipeline
是 Netty 中用于处理 I/O 事件的逻辑管道。它是Channel
的核心组成部分,负责按照特定顺序调用注册在其上的ChannelHandler
- 功能:
-
ChannelHandler
- 功能:
ChannelHandler
是 Netty 中用于处理 I/O 事件的具体逻辑类 - 分类:
- ChannelInboundHandler : 处理入站事件(如读取数据、连接建立等)
- ChannelOutboundHandler : 处理出站事件(如写入数据、关闭连接等)
- 功能: