04 netty的reactor模型

vvEcho 2026-02-26 16:14:58
Categories: Tags:

Reactor模型
Reactor 是一种事件驱动设计模式,用于处理一个或多个客户端并发交付的服务请求。
核心思想是:
解耦:将事件分发(dispatching)与事件处理(handling)分离
非阻塞 I/O:基于 NIO

核心组件

组件 职责 对应类
Reactor 监听和分发事件 EventLoop / EventLoopGroup
Acceptor 处理新连接请求 ServerBootstrapAcceptor
Handler 执行业务逻辑 ChannelHandler
Selector 多路复用器 Java NIO Selector

工作流程

  1. 启动阶段
    └── bossGroup 注册 ServerSocketChannel 到 Selector
    └── 监听 OP_ACCEPT 事件
  2. 连接建立
    └── 客户端连接 → Selector 感知 OP_ACCEPT
    └── bossGroup 的 EventLoop 执行 accept()
    └── 创建 SocketChannel,注册到 workerGroup 的 Selector
  3. 数据读写
    └── 数据到达 → workerGroup 的 Selector 感知 OP_READ
    └── EventLoop 读取数据 → 触发 ChannelRead 事件
    └── 在 Handler 链中传播处理
  4. 业务处理
    └── 耗时操作可提交到业务线程池(避免阻塞 I/O 线程)

关键设计

无锁串行化设计
单个 Channel 的所有 I/O 操作由同一个 EventLoop 线程执行
避免多线程竞争,无需加锁

零拷贝(Zero-Copy)
使用堆外内存(Direct Buffer)
通过 CompositeByteBuf 组合缓冲区,减少数据拷贝

内存池化
PooledByteBufAllocator 复用缓冲区
减少 GC 压力

责任链模式
ChannelPipeline 组织 Handler
事件在链中传播,解耦业务逻辑