Netty原理剖析与实战
书籍作者:傅健 |
ISBN:9787115567635 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:1719 |
创建日期:2023-01-09 |
发布日期:2023-01-09 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书旨在介绍Netty框架的原理和应用。本书首先介绍了什么是Netty,Netty的发展史,创建Netty应用程序所必备的基础知识,然后从参数调整、诊断性优化、性能优化等方面对Netty进行源码解析并讨论如何完善案例程序,最后讲述UDP应用、HTTP应用、文件应用和Netty编程思想。
本书适合有一定Java基础的架构师、设计师、开发工程师、测试工程师,以及对Netty感兴趣的相关人士阅读。
作者简介
傅健,认证网络工程师、信息系统项目管理师,思科(中国)研发中心软件工程师。拥有十年以上Java研发经验,专注于高性能平台服务器的开发,是Netty、Spring Data、Influxdb-java、Jenkins等开源项目的贡献者,著有《微服务之道:度量驱动开发》。
编辑推荐
适读人群 :本书适合有一定Java基础的架构师、设计师、开发工程师、测试工程师,以及对Netty感兴趣的相关人员阅读。
1.基于新的Netty版本,分析Netty 300多处关键代码,帮助读者深入理解Netty的实现;
2.Netty项目贡献者倾力写作,Netty创办人Trustin Lee等多位业内人士写序推荐;
3.详细介绍7个扩展功能和一个综合案例,使读者掌握安全、流量控制、性能优化等知识;
4.重点讲解Netty开发过程中40多个常见疑难点,拓展读者的知识面,增强实战技能。
目录
目 录
第一部分 源码解析与实战入门
第1章 Netty初印象 2
1.1 Netty的定义 2
1.2 Netty并非万能 3
1.3 Netty程序是什么样的 4
1.3.1 HTTP服务器构建案例 4
1.3.2 自定义TCP服务器案例 6
1.4 为什么不直接基于JDK NIO编程 8
1.4.1 Netty做得更多 8
1.4.2 Netty做得更好 9
1.4.3 基于JDK NIO实现难度太大 11
1.5 Netty相比同类框架的优势 13
1.5.1 Apache的Mina 13
1.5.2 Sun的Grizzly 13
1.5.3 Apple的Swift NIO和ACE等 14
1.5.4 Cindy和其他框架 14
1.6 Netty的过去、现状与发展趋势 14
1.6.1 Netty的过去 15
1.6.2 Netty的现状 16
1.6.3 Netty的发展趋势 18
第2章 准备工作 19
2.1 环境准备 19
2.1.1 准备源码阅读环境 19
2.1.2 准备实战案例环境 20
2.2 Netty代码编译及常见问题 20
2.2.1 常见编译问题一 20
2.2.2 常见编译问题二 22
2.3 Netty代码结构速览 24
2.4 本书借鉴的常用开源软件 26
2.4.1 Cassandra 26
2.4.2 Dubbo 26
2.4.3 Hadoop 27
2.4.4 Lettuce 27
2.4.5 GRPC 28
2.4.6 WebFlux 28
2.5 编写网络应用程序的基本步骤 29
2.5.1 完成代码编写 29
2.5.2 复查代码 30
2.5.3 “临门一脚” 31
2.5.4 上线及反馈 31
2.6 实战案例介绍 32
第3章 数据编码 34
3.1 网络编程中为什么要进行数据
编码 34
3.2 常见的数据编码方式及选择要点 35
3.2.1 常见的数据编码方式 36
3.2.2 数据编码选择要点 39
3.3 基于源码解析Netty对常见数据
编解码的支持 42
3.3.1 解析编解码支持的原理 42
3.3.2 解析典型Netty数据编解码的
实现 44
3.4 常见开源软件对编解码的使用 47
3.4.1 Cassandra 47
3.4.2 Dubbo 48
3.5 为实战案例选择数据编解码方案 51
3.5.1 定义JSON编解码方法 51
3.5.2 提供消息的完整编解码实现 52
3.5.3 实现Netty的编解码处理程序 53
3.6 常见疑问和实战易错点解析 54
3.6.1 常见疑问解析 54
3.6.2 常见实战易错点解析 56
第4章 封帧 58
4.1 网络编程为什么需要进行消息的
定界 58
4.1.1 TCP 58
4.1.2 UDP 60
4.2 常见的消息定界方式 61
4.2.1 TCP短连接方式 61
4.2.2 固定长度方式 61
4.2.3 封帧 62
4.2.4 其他方式 63
4.3 通过源码解析Netty如何支持
封帧 63
4.3.1 追加数据 65
4.3.2 尝试解析出消息对象 65
4.3.3 传递解析出的消息对象 66
4.4 常见开源软件如何封帧 67
4.4.1 Dubbo的帧结构 67
4.4.2 Cassandra的帧结构 67
4.4.3 Hadoop的帧结构 67
4.5 为实战案例定义封帧方式 69
4.6 常见疑问和实战易错点解析 70
4.6.1 常见疑问解析 70
4.6.2 常见实战易错点解析 72
第5章 网络编程模式 74
5.1 网络编程的3种模式 74
5.2 网络编程模式的选择要点 75
5.3 基于源码解析Netty对网络编程
模式的支持 76
5.3.1 Netty对网络编程模式的支持
情况 76
5.3.2 Netty对网络编程模式的实现
要点 78
5.4 常见开源软件是如何支持网络
编程模式的 81
5.4.1 Lettuce 81
5.4.2 Cassandra 83
5.5 为实战案例选择网络编程模式 84
5.6 常见疑问和实战易错点解析 84
5.6.1 常见疑问解析 84
5.6.2 常见实战易错点解析 86
第6章 线程模型 89
6.1 NIO的3种Reactor模式 89
6.1.1 Reactor单线程模式 91
6.1.2 Reactor多线程模式 92
6.1.3 Reactor主从多线程模式 92
6.2 源码解析Netty对3种Reactor
模式的支持 93
6.2.1 如何在Netty中使用这3种
Reactor模式 93
6.2.2 Netty在内部是如何支持Reactor
模式的 94
6.3 Netty线程模型的可优化点 98
6.4 常见开源软件是如何使用Reactor
模式的 101
6.4.1 Cassandra 101
6.4.2 Dubbo 102
6.4.3 Hadoop 105
6.5 为实战案例选择和实现线程模型 106
6.5.1 使用Reactor主从多线程模式 106
6.5.2 使用独立线程池 106
6.6 常见疑问和实战易错点解析 110
6.6.1 常见疑问解析 110
6.6.2 常见实战易错点解析 114
第二部分 源码解析与实战进阶
第7章 基于实战案例剖析Netty的
核心流程 118
7.1 剖析启动服务源码及技巧 119
7.1.1 主线 119
7.1.2 知识点 122
7.2 剖析构建连接源码及技巧 124
7.2.1 主线 124
7.2.2 知识点 127
7.3 剖析读取数据源码及技巧 127
7.3.1 主线 128
7.3.2 知识点 130
7.4 剖析处理业务源码及技巧 131
7.4.1 主线 131
7.4.2 知识点 134
7.5 剖析发送数据源码及技巧 135
7.5.1 主线 135
7.5.2 知识点 141
7.6 剖析关闭连接源码及技巧 141
7.6.1 主线 141
7.6.2 知识点 143
7.7 剖析关闭服务源码及技巧 143
7.7.1 主线 144
7.7.2 知识点 148
第8章 参数调整 149
8.1 参数调整概览 149
8.1.1 操作系统参数调整 149
8.1.2 Netty系统参数调整 150
8.1.3 Netty非系统参数调整 153
8.2 常见开源软件对Netty参数进行的
设置 155
8.3 调整案例程序的各个参数 156
8.4 常见疑问分析 156
8.4.1 使用option()和childOption()
方法设置参数的区别 157
8.4.2 参数ALLOW_HALF_CLOSURE
的用途与使用场景 159
第9章 诊断性优化 161
9.1 Netty日志优化 161
9.1.1 源码解析 161
9.1.2 开源案例 164
9.1.3 实战案例 166
9.2 Netty的关键诊断信息及可视化
方案 169
9.2.1 Netty的关键诊断信息 170
9.2.2 诊断信息的可视化方案 171
9.2.3 实战案例 173
9.3 Netty内存泄漏检测 176
9.3.1 检测原理 176
9.3.2 检测的几个关键点 180
9.3.3 实战案例 182
9.4 常见疑问和实战易错点解析 183
9.4.1 常见疑问解析 184
9.4.2 常见实战易错点解析 188
第10章 性能优化 189
10.1 优化写数据的性能 189
10.1.1 源码解析 190
10.1.2 开源案例 193
10.1.3 实战案例 197
10.2 使用Native NIO 198
10.2.1 源码解析 198
10.2.2 实战案例 202
10.3 常见疑问分析 203
10.3.1 Native库的加载顺序 203
10.3.2 check volume for noexec flag的
含义 205
第11章 系统增强 207
11.1 Netty高低水位线保护 207
11.1.1 源码解析 207
11.1.2 开源案例 209
11.1.3 实战案例 210
11.2 Netty流量控制保护 211
11.2.1 源码解析 212
11.2.2 实战案例 216
11.3 Netty空闲监测防护 218
11.3.1 源码解析 220
11.3.2 开源案例 224
11.3.3 实战案例 225
11.4 常见疑问解析 228
11.4.1 HTTP Keep-Alive和keepalive
之间的区别 228
11.4.2 IdleStateHandler中observeOutput
的功能 228
11.4.3 FileRegion的发送受高低水位线
控制吗 230
第12章 安全性提升 233
12.1 黑白名单 233
12.1.1 源码分析 234
12.1.2 实战案例 239
12.1.3 业界案例 241
12.2 自定义授权 243
12.2.1 实战案例 244
12.2.2 业界案例 247
12.3 SSL加密 249
12.3.1 理解SSL的本质 249
12.3.2 源码解析 251
12.3.3 实战案例 254
12.3.4 业界案例 256
12.4 常见疑问解析 258
12.4.1 如何设置IpSubnetFilterRule的
ipAddress 258
12.4.2 如何精确拦截连接地址 259
12.4.3 我们可以在创建连接时进行
连接控制吗 259
12.4.4 OptionalSslHandler的用途和
实现方法 260
第13章 可用性提升 262
13.1 使用响应分发进行优化 262
13.1.1 改进需求分析 262
13.1.2 改进策略的分析并应用 263
13.2 使用代理技术进行优化 266
13.2.1 改进需求分析 267
13.2.2 改进策略的分析及应用 269
13.3 使用响应式编程进行优化 271
13.3.1 改进需求分析 271
13.3.2 改进策略的分析及应用 272
第三部分 拓展
第14章 基于Netty构建UDP应用 276
14.1 解析Netty对UDP编程提供的
支持 276
14.2 服务器实现 279
14.2.1 实现请求解码器 279
14.2.2 实现业务处理程序 280
14.2.3 实现响应编码器 281
14.2.4 构建UDP服务器 281
14.3 客户端实现 282
14.3.1 基于Netty的NIO客户端 282
14.3.2 基于Netty的OIO客户端 285
14.3.3 基于JDK的客户端 285
14.4 扩展知识 286
14.4.1 目标地址的两种常见设置
方式 286
14.4.2 UDP包的发送方式 288
14.4.3 UDP广播及支持 290
14.5 常见易错点 290
14.5.1 误用JDK的DatagramPacket 290
14.5.2 误用ctx.channel().remoteAddress()
作为目标地址 292
14.5.3 发送的数据内容过多 294
14.5.4 误解客户端执行绑定操作的
意义 296
第15章 基于Netty构建HTTP应用 298
15.1 解析Netty是如何支持HTTP
服务的 298
15.1.1 编解码器HttpServerCodec 299
15.1.2 ExpectContinue处理程序HttpServer-
ExpectContinueHandler 302
15.1.3 请求合并器
HttpObjectAggregator 305
15.1.4 其他常用的HTTP处理程序 313
15.2 开源软件如何使用Netty构建
HTTP服务 314
15.2.1 Hadoop如何使用Netty构建
Web Hdfs 314
15.2.2 WebFlux如何基于Netty构建
Web服务 319
15.3 将案例程序改造为HTTP
应用 324
15.3.1 完成业务处理程序 325
15.3.2 组合处理程序以搭建HTTP
服务器 326
15.4 常见疑问解析 327
15.4.1 HttpServerExpectContinueHandler
和HttpObjectAggregator能否
共存 327
15.4.2 何时需要写LastHttpContent 328
15.4.3 HttpChunkedInput必须与
transfer-encoding:chunked
绑定在一起吗 331
15.4.4 其他流行框架如何根据请求
定位到处理位置 332
第16章 Netty对文件应用的支持 334
16.1 FileRegion 334
16.1.1 Netty如何支持FileRegion 335
16.1.2 解析FileRegion的劣势 337
16.2 ChunkedFile/ChunkedNioFile 338
16.2.1 比较ChunkedFile与
ChunkedNioFile 338
16.2.2 解析ChunkedWriteHandler的
实现 339
16.3 Netty文件应用案例解析 342
第17章 Netty的另类特性 344
17.1 Netty对虚拟机内管道提供的
支持 344
17.1.1 解析JDK自带的管道技术 344
17.1.2 如何使用Netty的虚拟机内
管道 347
17.1.3 基于源码解析Netty的虚拟机内
管道 349
17.2 Netty对UNIX域套接字提供的
支持 353
17.2.1 如何使用Netty的域套接字 353
17.2.2 基于源码解析Netty的域
套接字 355
17.3 Netty对JDK的ThreadLocal所做的
优化 359
17.3.1 在Netty中如何使用
FastThreadLocal 359
17.3.2 基于源码解析ThreadLocal的
性能缺陷 360
17.3.3 基于源码解析FastThreadLocal
所做的优化 362
17.4 Netty对JDK的Timer所做的
优化 365
17.4.1 在Netty中如何使用
HashedWheelTimer 365
17.4.2 基于源码解析Timer的性能
缺陷 366
17.4.3 基于源码解析HashedWheelTimer
所做的优化 368
第18章 Netty编程思想 372
18.1 注解的使用 372
18.1.1 @UnstableApi 373
18.1.2 @Skip 373
18.1.3 @Sharable 374
18.1.4 @SuppressJava6Requirement 375
18.1.5 @SuppressForbidden 377
18.2 内存的使用 380
18.2.1 减小对象本身 380
18.2.2 对分配的内存进行预估 381
18.2.3 采用零复制 382
18.2.4 使用堆外内存 384
18.2.5 使用内存池 385
18.3 多线程并发 386
18.3.1 注意锁的对象和范围 386
18.3.2 注意锁的对象本身的大小 386
18.3.3 注意锁的速度 387
18.3.4 为不同场景选择不同的
并发类 387
18.3.5 衡量好锁的价值 388
18.4 开发流程 389
18.4.1 建立需求 389
18.4.2 编写代码 390
18.4.3 平台校验 391
18.4.4 人工审阅 393
18.4.5 出包管理 393
18.5 代码规范 394
18.5.1 遵循代码风格 394
18.5.2 易于使用 395
18.5.3 小步前进、逐步修改 395
18.5.4 符合提交规范 396
附录A Netty TCP通信支持的实现 399
附录B 一些重要术语的翻译 400
短评
技术底层讲解透彻
2022-02-17 12:39:26
买来就读了,受益很多,很不错
2022-02-16 07:49:03
学习netty的进阶书
2021-12-09 09:53:36
讲的不够深入,作为入门还是可以的
2021-12-08 22:24:47
还没看完,等看完再说
2022-01-20 23:17:13
不错的一本书,适合初步了解netty的人读。
2022-01-14 23:55:58
不错的值得阅读
2022-01-03 15:41:49
质量好,送货快,十分满意。
2021-12-30 07:39:07
挺不错的书,内容清晰。
2021-12-22 08:48:43