《Netty 高性能网络编程》全 50 篇,是「Java 网络与 Netty」三卷本的第二卷。卷一用 JDK 原生 API 手写了
Selector、拆帧与 HTTP 协议;本卷把这些部件逐一映射到 Netty 4.2 的组件,并用一个可运行的linkd-v2工程贯穿始终。
本页是《Netty 高性能网络编程》的全书目录:按章节顺序列出全部 50 篇,点击标题直达正文。也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇 里的三条学习路径。
全书概览
| 项目 | 内容 |
|---|---|
| 书稿 | 《Netty 高性能网络编程》 |
| 篇数 | 50 篇(15 章 45 节 + 序、前言、目录 + 附录 A/B) |
| 领域 | Netty 4.2、事件循环、编解码、HTTP/2、WebSocket、性能调优 |
| 贯穿项目 | linkd-v2 —— 四模块 Netty 工程,端口 9090/9091/9092/9093 |
| 上游项目 | linkd —— 卷一的 JDK 原生实现,本卷逐项替换为 Netty 组件 |
| 阅读方式 | 从目录篇 进入按顺序通读,或按症状跳读 |
| 主线版本 | JDK 25 LTS(Temurin 25.0.5+8)、Netty 4.2.19.Final、Maven 3.9.12 |
| 关键依赖 | netty-all 4.2.19.Final、gRPC-Java 1.76.0、Protobuf 4.33.2 |
| 上级专题 | 书稿专题 |
全书目录
前置
| 节 | 文章 | 核心内容 |
|---|---|---|
| — | 序:为什么在 JDK NIO 之后还要学 Netty | 三卷本定位、Netty 解决的具体问题、学习预期 |
| — | 前言:读法、环境与约定 | 版本、机器口径、代码约定与四道门禁 |
| — | 目录与学习路径 | 三条学习路径、十五章结构、项目状态 |
第一部分:架构、启动与线程(第 1–3 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 1.1 | 1.1 Netty 在网络栈中的位置 | 与 JDK NIO 的分层、模块拆分、生态边界 |
| 1.2 | 1.2 从 Reactor 到 Netty 组件映射 | Reactor 角色与 EventLoopGroup、Channel、Pipeline |
| 1.3 | 1.3 linkd-v2 工程与依赖 | 四模块 POM、端口分配、共享协议类型 |
| 2.1 | 2.1 ServerBootstrap 与 Bootstrap | 服务端/客户端启动、childHandler、bind 与 connect |
| 2.2 | 2.2 Channel 生命周期与 ChannelFuture | 注册、激活、注销、Future 监听器与异常 |
| 2.3 | 2.3 ChannelOption 与 Socket 参数 | SO_BACKLOG、TCP_NODELAY、SO_KEEPALIVE 与 allocator |
| 3.1 | 3.1 EventLoopGroup 与线程归属 | boss/worker、线程数、Channel 与 EventLoop 绑定 |
| 3.2 | 3.2 任务队列与定时任务 | execute、schedule、GlobalEventExecutor |
| 3.3 | 3.3 阻塞隔离与虚拟线程 | DefaultEventExecutorGroup、阻塞检测、虚拟线程取舍 |
第二部分:Pipeline 与内存(第 4–6 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 4.1 | 4.1 Pipeline 结构与事件传播 | 双向链表、入站/出站、ctx.fire* 与 ctx.write |
| 4.2 | 4.2 Handler 生命周期与状态 | handlerAdded、channelActive、@Sharable 判定 |
| 4.3 | 4.3 Handler 共享与线程安全 | 有状态 handler、每连接实例、共享陷阱 |
| 5.1 | 5.1 ByteBuf 索引与视图 | reader/writer index、slice/duplicate、池化与非池化 |
| 5.2 | 5.2 引用计数与泄漏 | retain/release、SimpleChannelInboundHandler、所有权 |
| 5.3 | 5.3 PooledByteBufAllocator 与 Arena | arena、chunk、page、线程缓存与分配路径 |
| 6.1 | 6.1 ByteToMessageDecoder | 累积缓冲、decode 循环、discardReadBytes |
| 6.2 | 6.2 长度域、分隔符与定长解码 | LengthFieldBasedFrameDecoder 五参数与四组配置 |
| 6.3 | 6.3 编解码错误与异常传播 | DecodingException、exceptionCaught、关闭策略 |
第三部分:协议与会话(第 7–9 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 7.1 | 7.1 协议帧设计与魔数 | 16 字节头、LKDF 魔数、帧类型与上限 |
| 7.2 | 7.2 IdleStateHandler 与心跳 | 读/写/全空闲、心跳任务、误判与关闭 |
| 7.3 | 7.3 握手、认证与连接绑定 | HELLO/HELLO_ACK、令牌校验、Channel 属性 |
| 8.1 | 8.1 客户端连接与重连 | Bootstrap、退避、重连状态机与停止条件 |
| 8.2 | 8.2 连接池与多路复用 | 池化客户端、借还、健康检查与上限 |
| 8.3 | 8.3 关闭、半关闭与连接回收 | closeFuture、shutdownOutput、ChannelGroup |
| 9.1 | 9.1 Channel.isWritable 与高低水位 | WriteBufferWaterMark、可写事件、丢弃策略 |
| 9.2 | 9.2 写队列与可写事件 | 出站缓冲、channelWritabilityChanged、批量 flush |
| 9.3 | 9.3 读背压与 AUTO_READ | autoRead(false)、手动 read()、与写水位配合 |
第四部分:协议栈与原生传输(第 10–12 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 10.1 | 10.1 WebSocketServerProtocolHandler | 握手、路径匹配、子协议与 handler 顺序 |
| 10.2 | 10.2 帧处理、分片与聚合 | WebSocketFrame、ContinuationWebSocketFrame、WebSocketFrameAggregator |
| 10.3 | 10.3 会话表、心跳与广播 | ChannelGroup、ping/pong、广播与慢客户端 |
| 11.1 | 11.1 Http2FrameCodec 与多路复用 | 连接级/流级 handler、Http2StreamFrame |
| 11.2 | 11.2 HTTP/2 服务端与流生命周期 | h2c、Http2MultiplexHandler、流关闭与 RST |
| 11.3 | 11.3 gRPC on Netty 的结构 | gRPC 复用 Netty 的层次、线程模型与流控 |
| 12.1 | 12.1 原生传输与平台差异 | NIO/Epoll/KQueue、可用性探测与回退 |
| 12.2 | 12.2 KQueue 在 macOS 的实测 | KQueue.isAvailable()、绑定输出、原生访问参数 |
| 12.3 | 12.3 Epoll 在 Linux 的配置 | Epoll.isAvailable()、边缘触发、SO_REUSEPORT |
第五部分:诊断、调优与验收(第 13–15 章)
| 节 | 文章 | 核心内容 |
|---|---|---|
| 13.1 | 13.1 ResourceLeakDetector | 四档级别、PARANOID 报告、定位与回退 |
| 13.2 | 13.2 堆外内存与 PoolArena 指标 | PooledByteBufAllocator.metric()、chunk/arena 观测 |
| 13.3 | 13.3 线程栈、JFR 与连接诊断 | jstack、JFR 事件、ss/lsof 与 EventLoop 线程名 |
| 14.1 | 14.1 参数基线:水位、缓冲区、线程数 | 默认值、基线配置、线程数与分配器选择 |
| 14.2 | 14.2 压测工具与指标口径 | ab、自定义协议压测、吞吐/分位/错误率 |
| 14.3 | 14.3 调优案例与回归 | 症状、假设、变更、回归与防回退 |
| 15.1 | 15.1 网关路由与转发 | 路由表、Netty 客户端转发、超时与错误映射 |
| 15.2 | 15.2 限流、超时与降级 | 令牌桶、分层超时、熔断与失败关闭 |
| 15.3 | 15.3 linkd-v2 验收与复盘 | 验收清单、故障注入、复盘模板 |
附录
| 节 | 文章 | 核心内容 |
|---|---|---|
| A | 附录 A Netty 常用 API 速查 | Bootstrap、Channel、ByteBuf、编解码器与 HTTP/2 常用方法 |
| B | 附录 B Netty 诊断与调优命令 | 线程栈、JFR、泄漏检测、原生传输与压测命令 |
三卷衔接
- 卷一《Java 网络编程基础》:只用 JDK,建立字节流、拆帧、事件循环与协议实现的底层直觉。
- 卷二(本书):把卷一手写的组件映射到 Netty 4.2,并补齐连接池、背压、HTTP/2 与生产诊断。
- 卷三《Java 服务端通信工程》:把 Netty 放回服务端工程,讲 gRPC 服务化、服务发现、超时重试、可观测性与发布。
实验口径
- 所有「本机输出」来自 macOS 26.3、Apple M1 Pro、Temurin 25.0.5+8、Netty 4.2.19.Final;换机器后绝对值会变。
- macOS 上
Epoll.isAvailable()为false、KQueue.isAvailable()为true,本卷的 KQueue 输出是实跑结果;Epoll 章节只讲配置与差异,不伪造 Linux 实测。 - 没有实际执行的压测与性能数字,不写成实测;单次运行会明确标注。
- 代码以可编译为准,共享类型在
linkd-v2契约中固定;章节之间允许增量生长,不要求每节从零搭项目。