Netty 核心概念详解
2026/6/25 13:04:29 网站建设 项目流程

Netty 核心概念详解

    • 一、Reactor 线程模型
      • 1.1 什么是 Reactor 模型
      • 1.2 Netty 中的 Reactor 实现
      • 1.3 单 Reactor 单线程模型
      • 1.4 单 Reactor 多线程模型
      • 1.5 主从 Reactor 多线程模型(Netty 默认)
    • 二、ChannelPipeline(管道)
      • 2.1 什么是 ChannelPipeline
      • 2.2 Pipeline 结构
      • 2.3 Handler 类型
      • 2.4 实际 Pipeline 配置
      • 2.5 数据在 Pipeline 中的流动
    • 三、ByteBuf(字节缓冲区)
      • 3.1 什么是 ByteBuf
      • 3.2 ByteBuf 内存布局
      • 3.3 常用操作
      • 3.4 内存分配策略
    • 四、Netty 处理请求的生命周期
      • 4.1 完整流程图
      • 4.2 关键事件
    • 五、零拷贝原理
      • 5.1 什么是零拷贝
      • 5.2 传统拷贝 vs 零拷贝
        • 传统拷贝(4 次拷贝 + 4 次上下文切换)
        • 零拷贝(2 次拷贝 + 2 次上下文切换)
      • 5.3 Netty 中的零拷贝实现
        • 5.3.1 CompositeByteBuf(复合缓冲区)
        • 5.3.2 ByteBuf.slice()(切片)
        • 5.3.3 FileRegion(文件区域)
      • 5.4 零拷贝的优势
    • 六、总结
      • 记忆口诀:
      • 6.1 核心概念速查
      • 6.2 学习路径建议
      • 6.3 常见问题

一、Reactor 线程模型

1.1 什么是 Reactor 模型

Reactor 模型是一种事件驱动的并发处理模型,核心思想是:一个或多个事件处理器(Reactor)负责监听和处理多个连接的事件

1.2 Netty 中的 Reactor 实现

Netty 使用NioEventLoopGroup来实现 Reactor 模型:

┌─────────────────────────────────────────────────────────┐ │ BossGroup (Reactor) │ │ ┌─────────────┐ │ │ │ EventLoop │ 负责:接受客户端连接 │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ▼ 连接建立后移交 ┌─────────────────────────────────────────────────────────┐ │ WorkerGroup (Reactor) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ │ │ (线程1) │ │ (线程2) │ │ (线程3) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ 负责:读写数据、业务处理 │ └─────────────────────────────────────────────────────────┘

1.3 单 Reactor 单线程模型

┌─────────────┐ │ EventLoop │ ← 一个线程处理所有连接 │ (单线程) │ 接受连接 + 读写数据 └─────────────┘

缺点:所有连接共享一个线程,某个连接处理慢会影响其他连接。

1.4 单 Reactor 多线程模型

┌─────────────┐ │ EventLoop │ ← 一个线程只负责接受连接 │ (单线程) │ └─────────────┘ │ ▼ 连接建立后移交 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ (线程1) │ │ (线程2) │ │ (线程3) │ └─────────────┘ └─────────────┘ └─────────────┘ 负责读写数据

优点:接受连接和读写数据分离,互不干扰。

1.5 主从 Reactor 多线程模型(Netty 默认)

┌─────────────────────────────────────────────────────────┐ │ BossGroup (主 Reactor) │ │ ┌─────────────┐ │ │ │ EventLoop │ 负责:接受客户端连接 │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ▼ 连接建立后移交 ┌─────────────────────────────────────────────────────────┐ │ WorkerGroup (从 Reactor) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ │ │ (线程1) │ │ (线程2) │ │ (线程3) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ 负责:读写数据、业务处理 │ └─────────────────────────────────────────────────────────┘

Netty 代码对应

EventLoopGroupbossGroup=newNioEventLoopGroup(1);// 主 ReactorEventLoopGroupworkerGroup=newNioEventLoopGroup();// 从 Reactor(默认 CPU 核数 * 2)

二、ChannelPipeline(管道)

2.1 什么是 ChannelPipeline

ChannelPipeline 是 Netty 中处理网络 I/O 操作的链式结构,由多个 Handler 组成。数据在管道中双向流动

  • 下行(Inbound):从网络 → 应用层(读数据)
  • 上行(Outbound):从应用层 → 网络(写数据)

2.2 Pipeline 结构

┌─────────────────────────────────────────────────────────┐ │ ChannelPipeline │ │ │ │ [Head] → [LoggingHandler] → [FrameDecoder] → │ │ [ProtocolDecoder] → [BusinessHandler] → [Tail] │ │ │ │ 数据流向: │ │ 下行(读):Head → Tail(从左到右) │ │ 上行(写):Tail → Head(从右到左) │ └─────────────────────────────────────────────────────────┘

2.3 Handler 类型

类型说明常用接口
ChannelHandler基础接口ChannelHandler
ChannelInboundHandler处理下行事件(读)ChannelInboundHandlerAdapter
ChannelOutboundHandler处理上行事件(写)ChannelOutboundHandlerAdapter
ChannelDuplexHandler同时处理双向事件ChannelDuplexHandler

2.4 实际 Pipeline 配置

ch.pipeline().addLast

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询