[201504][Netty 权威指南][第2版][李林锋][著]

[201504][Netty 权威指南][第2版][李林锋][著]

https://github.com/wuyinxian124/nettybook2

基础篇 走进 Java NIO

第 1 章 Java 的 I/O 演进之路

1.1 I/O 基础入门

1.1.1 Linux 网络 I/O 模型简介
1.1.2 I/O 多路复用技术

1.2 Java 的 I/O 演进

1.3 总结

第 2 章 NIO 入门

2.1 传统的 BIO 编程

2.1.1 BIO 通信模型图
2.1.2 同步阻塞式 I/O 创建的 TimeServer 源码分析
2.1.3 同步阻塞式 I/O 创建的 TimeClient 源码分析

2.2 伪异步 I/O 编程

2.2.1 伪异步 I/O 模型图
2.2.2 伪异步 I/O 创建的 TimeServer 源码分析
2.2.3 伪异步 I/O 弊端分析

2.3 NIO 编程

2.3.1 NIO 类库简介
2.3.2 NIO 服务端序列图
2.3.3 NIO 创建的 TimeServer 源码分析
2.3.4 NIO 客户端序列图
2.3.5 NIO 创建的 TimeClient 源码分析

2.4 AIO 编程

2.4.1 AIO 创建的 TimeServer 源码分析
2.4.2 AIO 创建的 TimeClient 源码分析
2.4.3 AIO 版本时间服务器运行结果

2.5 4 种 I/O 的对比

2.5.1 概念澄清
2.5.2 不同 I/O 模型对比

2.6 选择 Netty 的理由

2.6.1 不选择 Java 原生 NIO 编程的原因
2.6.2 为什么选择 Netty

2.7 总结

入门篇 Netty NIO 开发指南

第 3 章 Netty 入门应用

3.1 Netty 开发环境的搭建

3.1.1 下载 Netty 的软件包
3.1.2 搭建 Netty 应用工程

3.2 Netty 服务端开发

3.3 Netty 客户端开发

3.4 运行和调试

3.4.1 服务端和客户端的运行
3.4.2 打包和部署

3.5 总结

第 4 张 TCP 粘包/拆包问题的解决之道

4.1 TCP 粘包/拆包

4.1.1 TCP 粘包/拆包问题说明
4.1.2 TCP 粘包/拆包发生的原因
4.1.3 粘包问题的解决策略

4.2 未考虑 TCP 粘包导致功能异常案例

4.2.1 TimeServer 的改造
4.2.2 TimeClient 的改造
4.2.3 运行结果

4.3 利用 LineBasedFrameDecoder 解决 TCP 粘包问题

4.3.1 支持 TCP 粘包的 TimeServer
4.3.2 支持 TCP 粘包的 TimeClient
4.3.3 运行支持 TCP 粘包的时间服务器程序
4.3.4 LineBasedFrameDecoder 和 StringDecoder 的原理分析

4.4 总结

第 5 章 分隔符和定长解码器的应用

5.1 DelimiterBasedFrameDecoder 应用开发

5.1.1 DelimiterBasedFrameDecoder 服务端开发
5.1.2 DelimiterBasedFrameDecoder 客户端开发
5.1.3 运行 DelimiterBasedFrameDecoder 服务端和客户端

5.2 FixedLengthFrameDecoder 应用开发

5.2.1 FixedLengthFrameDecoder 服务端开发
5.2.2 利用 telnet 命令行测试 EchoServer 服务端

5.3 总结

中级篇 Netty 编解码开发指南

第 6 章 编解码技术

6.1 Java 序列化的缺点

6.1.1 无法跨语言
6.1.2 序列化后的码流太大
6.1.3 序列化性能太低

6.2 业界主流的编解码框架

6.2.1 Google 的 Protobuf 介绍
6.2.2 Facebook 的 Thrift 介绍
6.2.3 JBoss Marshalling 介绍

6.3 总结

第 7 章 MessagePack 编解码

7.1 MessagePack 介绍

7.1.1 MessagePack 多语言支持
7.1.2 MessagePack Java API 介绍
7.1.3 MessagePack 开发包下载

7.2 MessagePack 编码器和解码器开发

7.2.1 MessagePack 编码器开发
7.2.2 MessagePack 解码器开发
7.2.3 功能测试

7.3 粘包/半包支持

7.4 总结

第 8 章 Google Protobuf 编解码

8.1 Protobuf 的入门

8.1.1 Protobuf 开发环境搭建
8.1.2 Protobuf 编解码开发
8.1.3 运行 Protobuf 例程

8.2 Netty 的 Protobuf 服务端开发

8.2.1 Protobuf 版本的图书订购服务端开发
8.2.2 Protobuf 版本的图书订购客户端开发
8.2.3 Protobuf 版本的图书订购程序功能测试

8.3 Protobuf 的使用注意事项

8.4 总结

第 9 章 JBoss Marshalling 编解码

9.1 Marshalling 开发环境准备

9.2 Netty 的 Marshalling 服务端开发

9.3 Netty 的 Marshalling 客户端开发

9.4 运行 Marshalling 客户端和服务端例程

9.5 总结

高级篇 Netty 多协议开发和应用

第 10 章 HTTP 协议开发应用

10.1 HTTP 协议介绍

10.1.1 HTTP 协议的 URL
10.1.2 HTTP 请求消息(HttpRequest)
10.1.3 HTTP 响应消息(HttpResponse)

10.2 Netty HTTP 服务端入门开发

10.2.1 HTTP 服务端例程场景描述
10.2.2 HTTP 服务端开发
10.2.3 Netty HTTP 文件服务器例程运行结果

10.3 Netty HTTP + XML 协议栈开发

10.3.1 开发场景介绍
10.3.2 HTTP + XML 协议栈设计
10.3.3 高效的 XML 绑定框架 JiBx
10.3.4 HTTP + XML 编解码框架开发
10.3.5 HTTP + XML 协议栈测试
10.3.6 小结

10.4 总结

第 11 章 WebSocket 协议开发

11.1 HTTP 协议的弊端

11.2 WebSocket 入门

11.2.1 WebSocket 背景
11.2.2 WebSocket 连接建立
11.2.3 WebSocket 生命周期
11.2.4 WebSocket 连接关闭

11.3 Netty WebSocket 协议开发

11.3.1 WebSocket 服务端功能介绍
11.3.2 WebSocket 服务端开发
11.3.3 运行 WebSocket 服务端

11.4 总结

第 12 章 私有协议栈开发

12.1 私有协议介绍

12.2 Netty 协议栈功能设计

12.2.1 网络拓扑图
12.2.2 协议栈功能描述
12.2.3 通信模型
12.2.4 消息定义
12.2.5 Netty 协议支持的字段类型
12.2.6 Netty 协议的编解码规范
12.2.7 链路的建立
12.2.8 链路的关闭
12.2.9 可靠性设计
12.2.10 安全性设计
12.2.11 可扩展性设计

12.3 Netty 协议栈开发

12.3.1 数据结构定义
12.3.2 消息编解码
12.3.3 握手和安全认证
12.3.4 心跳检测机制
12.3.5 断连重连
12.3.6 客户端代码
12.3.7 服务端代码

12.4 运行协议栈

12.4.1 正常场景
12.4.2 异常场景:服务端宕机重启
12.4.3 异常场景:客户端宕机重启

12.5 总结

第 13 章 服务端创建

13.1 原生 NIO 类库的复杂性

13.2 Netty 服务端创建源码分析

13.2.1 Netty 服务端创建时序图
13.2.2 Netty 服务端创建源码分析

13.3 客户端接入源码分析

13.4 总结

第 14 章 客户端创建

14.1 Netty 客户端创建流程分析

14.1.1 Netty 客户端创建时序图
14.1.2 Netty 客户端创建流程分析

14.2 Netty 客户端创建源码分析

14.2.1 客户端连接辅助类 Bootstrap
14.2.2 客户端连接操作
14.2.3 异步连接结果通知
14.2.4 客户端连接超时机制

14.3 总结

源码分析篇 Netty 功能介绍和源码分析

第 15 章 ByteBuf 和相关辅助类

15.1 ByteBuf 功能说明

15.1.1 ByteBuf 的工作原理
15.1.2 ByteBuf 的功能介绍

15.2 ByteBuf 源码分析

15.2.1 ByteBuf 的主要类继承关系
15.2.2 AbstractByteBuf 源码分析
15.2.3 AbstractReferenceCountedByteBuf 源码分析
15.2.4 UnpooledHeapByteBuf 源码分析
15.2.5 PooledByteBuf 内存池原理分析
15.2.6 PooledDirectByteBuf 源码分析

15.3 ByteBuf 相关的辅助类功能介绍

15.3.1 ByteBufHolder
15.3.2 ByteBufAllocator
15.3.3 CompositeByteBuf
15.3.4 ByteBufUtil

15.4 总结

第 16 章 Channel 和 Unsafe

16.1 Channel 功能说明

16.1.1 Channel 的工作原理
16.1.2 Channel 的功能介绍

16.2 Channel 源码分析

16.2.1 Channel 的主要继承关系类图
16.2.2 AbstractChannel 源码分析
16.2.3 AbstractNioChannel 源码分析
16.2.4 AbstractNioByteChannel 源码分析
16.2.5 AbstractNioMessageChannel 源码分析
16.2.6 AbstractNioMessageServerChannel 源码分析
16.2.7 NioServerSocketChannel 源码分析
16.2.8 NioSocketChannel 源码分析

16.3 Unsafe 功能说明

16.4 Unsafe 源码分析

16.4.1 Unsafe 继承关系类图
16.4.2 AbstractUnsafe 源码分析
16.4.3 AbstractNioUnsafe 源码分析
16.4.4 NioByteUnsafe 源码分析

16.5 总结

第 17 章 ChannelPipeline 和 ChannelHandler

17.1 ChannelPipeline 功能说明

17.1.1 ChannelPipeline 的事件处理
17.1.2 自定义拦截器
17.1.3 构建 pipeline
17.1.4 ChannelPipeline 的主要特性

17.2 ChannelPipeline 源码分析

17.2.1 ChannelPipeline 的类继承关系图
17.2.3 ChannelPipeline 的 inbound 事件
17.2.4 ChannelPipeline 的 outbound 事件

17.3 ChannelHandler 功能说明

17.3.1 ChannelHandlerAdapter 功能说明
17.3.2 ByteToMessageDecoder 功能说明
17.3.3 MessageToMessageDecoder 功能说明
17.3.4 LengthFieldBasedFrameDecoder 功能说明
17.3.5 MessageToByteEncoder 功能说明
17.3.6 MessageToMessageEncoder 功能说明
17.3.7 LengthFieldPrepender 功能说明

17.4 ChannelHandler 源码分析

17.4.1 ChannelHandler 的类继承关系图
17.4.2 ByteToMessageDecoder 源码分析
17.4.3 MessageToMessageDecoder 源码分析
17.4.4 LengthFieldBasedFrameDecoder 源码分析
17.4.5 MessageToByteEncoder 源码分析
17.4.6 MessageToMessageEncoder 源码分析
17.4.7 LengthFieldPrepender 源码分析

17.5 总结

第 18 章 EventLoop 和 EventLoopGroup

18.1 Netty 的线程模型

18.1.1 Reactor 单线程模型
18.1.2 Reactor 多线程模型
18.1.3 主从 Reactor 多线程模型
18.1.4 Netty 的线程模型
18.1.5 最佳实践

18.2 NioEventLoop 源码分析

18.2.1 NioEventLoop 设计原理
18.2.2 NioEventLoop 继承关系类图
18.2.3 NioEventLoop

18.3 总结

第 19 章 Future 和 Promise

19.1 Future 功能

19.2 ChannelFuture 源码分析

19.3 Promise 功能介绍

19.4 Promise 源码分析

19.4.1 Promise 继承关系图
19.4.2 DefaultPromise

19.5 总结

架构和行业应用篇 Netty 高级特性

第 20 章 Netty 架构剖析

20.1 Netty 逻辑架构

20.1.1 Reactor 通信调度层
20.1.2 职责链 ChannelPipeline
20.1.3 业务逻辑编排层(Service ChannelHandler)

20.2 关键架构质量属性

20.2.1 高性能
20.2.2 可靠性
20.2.3 可定制性
20.2.4 可扩展性

20.3 总结

第 21 章 Java 多线程编程在 Netty 中的应用

21.1 Java 内存模型与多线程编程

21.1.1 硬件的发展和多任务处理
21.1.2 Java 内存模型

21.2 Netty 的并发编程实践

21.2.1 对共享的可变数据进行正确的同步
21.2.2 正确使用锁
21.2.3 volatile 的正确使用
21.2.4 CAS 指令和原子类
21.2.5 线程安全类的应用
21.2.6 读写锁的应用
21.2.7 线程安全性文档说明
21.2.8 不要依赖线程优先级

21.3 总结

第 22 章 高性能之道

22.1 RPC 调用性能模型分析

22.1.1 传统 RPC 调用性能差的三宗罪
22.1.2 I/O 通信性能三原则

22.2 Netty 高性能之道

22.2.1 异步非阻塞通信
22.2.2 高效的 Reactor 线程模型
22.2.3 无锁化的串行设计
22.2.4 高效的并发编程
22.2.5 高性能的序列化框架
22.2.6 零拷贝
22.2.7 内存池
22.2.8 灵活的 TCP 参数配置能力

22.3 主流 NIO 框架性能对比

22.4 总结

第 23 章 可靠性

23.1 可靠性需求

23.1.1 宕机的代价
23.1.2 Netty 可靠性需求

23.2 Netty 高可靠性设计

23.2.1 网络通信类故障
23.2.1.1 客户端连接超时
23.2.1.2 通信对端强制关闭连接
23.2.1.3 链路关闭
23.2.1.4 定制 I/O 故障
23.2.2 链路的有效性检测
23.2.3 Reactor 线程的保护
23.2.3.1 异常处理要谨慎
23.2.3.2 规避 NIO BUG
23.2.4 内存保护
23.2.4.1 缓冲区的内存泄露保护
23.2.4.2 缓冲区溢出保护
23.2.5 流量整形
23.2.5.1 全局流量整形
23.2.5.2 链路级流量整形
23.2.6 优雅停机接口

23.3 优化建议

23.3.1 发送队列容量上限控制
23.3.2 回推发送失败的消息

23.4 总结

第 24 章 安全性

24.1 严峻的安全形势

24.1.1 OpenSSL Heart bleed 漏洞
24.1.2 安全漏洞的代价
24.1.3 Netty 面临的安全风险

24.2 Netty SSL 安全特性

24.2.1 SSL 单向认证
24.2.1.1 单向认证开发
24.2.1.2 单向认证原理
24.2.2 SSL 双向认证
24.2.2.1 双向认证开发
24.2.2.2 双向认证原理
24.2.3 第三方 CA 认证
24.2.3.1 服务端证书制作
24.2.3.2 客户端证书制作

24.3 Netty SSL 源码分析

24.3.1 客户端
24.3.2 服务端
24.3.3 消息读取
24.3.4 消息发送

24.4 Netty 扩展的安全特性

24.4.1 IP 地址黑名单机制
24.4.2 接入认证

24.5 总结

第 25 章 Netty 未来展望

25.1 应用范围

25.2 技术演进

25.3 社区活跃度

25.4 Road Map

25.5 总结

附录 A Netty 参数配置表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值