Untitled
Netty 源码研读 · 总路线图(Master Plan)
目标:用「讲透式」博客(博客体 + 可运行 demo + SVG 图 + 关键处 Java NIO 对照)逐行走读 Netty 4.1 源码,从启动流程一路钻到内存池与事件传播。
读法:先骨架后血肉——先把"组件全景 + 启动流程"看明白,再逐层下钻到 EventLoop、Pipeline、ByteBuf,最后把读/写/连接三条主链路完整串一遍。
本文件是总路线图,各模块落到具体文章时再逐步展开。
〇、阅读约定(待确认)
- 研读版本(已锁):Netty 4.1.x 稳定 tag(
netty-4.1.110.Final附近)。4.1 是长期主线;Netty 5 已废弃,不跟。 - 每篇结构:开场钩子 → 「是什么 / 坑在哪 / 本质一句话」递进 → 贴出真实源码片段 + 行号 → 可运行最小 demo → SVG 时序/结构图 → 对比小结。
- 图一律 SVG(不写 ASCII 图):架构图、双向链表、时序图都画成内联
<svg>。 - 文章内禁止预测下一篇(不写"下篇预告/下回分解"类字样)。
- 日期与排期策略:见文末「待确认」。
- abbrlink 前缀:
nety+ 4 位序号,如nety0101、nety0102…… - 分类 / 系列:
categories: [Java, Netty源码研读]、series: [Java, Netty源码研读]。
一、目录结构
1 | source/_posts/Java/Netty源码研读/ |
说明:Netty 是单一主题,不像 CS 基础课那样拆成多门"课",故采用扁平目录 + 顺序编号,而非子目录。若后续想按 Phase 分子目录,可再调整。
二、模块拆分(8 个 Phase / 约 28 篇)
Phase 0 · 准备与环境
- 拉取源码、IDE 导入、跑通
echo例子;本系列读法与本机环境约定
Phase 1 · 宏观架构与启动流程(先看骨架)
- Netty 整体架构:Reactor 模型 + 核心组件全景(Bootstrap / EventLoopGroup / Channel / Pipeline / Handler)
- 服务端启动全流程:
ServerBootstrap配置 →bind()→initAndRegister→ 注册到 EventLoop - 客户端启动与连接建立:
Bootstrap.connect()链路
Phase 2 · NIO 基石与 Channel 抽象
- Java NIO 回顾:Selector / Channel / Buffer,以及原生坑(epoll 空轮询、JDK NIO bug)
Channel接口体系与ChannelPromise(异步结果为什么这样设计)Unsafe内部类:真正的 I/O 操作为什么藏在Unsafe里NioServerSocketChannel/NioSocketChannel的创建与注册
Phase 3 · 事件循环与线程模型(心脏)
EventLoop与EventLoopGroup:SingleThreadEventExecutor源码- 任务队列与定时任务:
taskQueue/schedule/wakeup - Reactor 线程
run()主循环:select→processSelectedKeys→runAllTasks - 多线程模型:Boss/Worker 分组、Channel 如何绑定到固定 EventLoop(线程亲和)
Phase 4 · ChannelPipeline 与事件传播(神经系统)
ChannelPipeline双向链表结构与ChannelHandlerContext- 入站 / 出站事件传播:
fireXXX与invokeXXX的双向流动 HeadContext/TailContext的角色与收尾- 自定义 Handler 编排与异常传播(
exceptionCaught)
Phase 5 · 内存与 ByteBuf(血液)
ByteBuf设计:读写指针分离、ReferenceCounted引用计数- 内存分配:
ByteBufAllocator、UnpooledvsPooled PooledByteBufAllocator与 jemalloc 风格池化:PoolArena/Chunk/Page/Subpage- Netty 零拷贝:
CompositeByteBuf、slice、FileRegion、wrap
Phase 6 · 编解码与数据处理
- Codec 框架:
ByteToMessageDecoder/MessageToByteEncoder - 拆包 / 粘包:
LengthFieldBasedFrameDecoder源码走读 - 常用编解码器:
String/Protobuf/HTTP
Phase 7 · 读 / 写 / 连接主链路串讲(收口)
- 服务端读链路:
OP_ACCEPT→ 建连 →OP_READ→ 数据流入 Pipeline - 写链路:
write→flush→ 真正 socket 写出 →OP_WRITE可写性控制 - 背压与可写性:
isWritable()/writabilityChanged
Phase 8 · 进阶主题(按需)
Future/Promise异步模型与notify机制- 性能内核:
FastThreadLocal、Recycler对象池 - 原生
epoll/kqueue传输(Linux / macOS 优化) - 心跳与空闲检测:
IdleStateHandler - 收尾:手写一个 mini-Netty(把核心机制复述一遍)
三、已确认约定(2026-08-26 拍板)
- 研读版本:锁定 Netty 4.1.x 稳定 tag(
netty-4.1.110.Final附近)。4.1 是长期主线,Netty 5 已废弃,不跟。 - 日期策略:回溯时间线(仿 CS 基础课)。文章
date从2025-08-21(周四)起,连续 2 篇/周(周一 + 周四),到2025-12-04收尾;博客已开future: true,按时间顺序渲染。真实发文从今天(2026-08)按节奏推进。 - 节奏:2 篇 / 周(周一 + 周四)。
- 目录组织:扁平目录 + 顺序编号,不分子目录。
- abbrlink:
nety01xx(nety0101~nety0131)。 - 分类 / 系列:
categories: [Java, Netty源码研读]、series: [Java, Netty源码研读]。 - 排期数据:完整逐篇日期表见同目录
_schedule.json(仿 CS 基础课格式)。
四、分阶段日期表(31 篇 / 2025-08-21 → 2025-12-04)
| 阶段 | 篇数 | 起 | 止 | 主题 |
|---|---|---|---|---|
| Phase 0 | 1 | 2025-08-21 | 2025-08-21 | 环境 + 读法约定 |
| Phase 1 | 3 | 2025-08-25 | 2025-09-01 | 宏观架构与启动流程 |
| Phase 2 | 4 | 2025-09-04 | 2025-09-15 | NIO 基石与 Channel 抽象 |
| Phase 3 | 4 | 2025-09-18 | 2025-09-29 | 事件循环与线程模型 |
| Phase 4 | 4 | 2025-10-02 | 2025-10-13 | ChannelPipeline 与事件传播 |
| Phase 5 | 4 | 2025-10-16 | 2025-10-27 | 内存与 ByteBuf |
| Phase 6 | 3 | 2025-10-30 | 2025-11-06 | 编解码与数据处理 |
| Phase 7 | 3 | 2025-11-10 | 2025-11-17 | 读 / 写 / 连接主链路串讲 |
| Phase 8 | 5 | 2025-11-20 | 2025-12-04 | 进阶主题 + 收尾 mini-Netty |
下一步:从 Phase 0 第 1 篇(环境 + 读法)开始,按"先讲透再下笔"的约定逐篇推进。每篇定稿前会先和你对齐关键概念。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.

