Netty 4核心原理与手写RPC框架实战 |
|
定价 |
108.00 |
出版社 |
电子工业出版社 |
版次 |
1 |
出版时间 |
2020年03月 |
开本 |
16开 |
作者 |
谭勇德(Tom) |
装帧 |
平塑勒单衬 |
页数 |
456 |
字数 |
634000 |
ISBN编码 |
9787121385063 |
内容介绍
《Netty 4核心原理与手写RPC框架实战》1先从硬件层面深入分析网络通信原理,结合Java对网络I/O的API实现,将理论与实践串联起来,帮助大家透彻理解网络通信的起源,然后介绍Netty产生的背景并基于Netty手写Tomcat和RPC框架,帮助大家初步了解Netty的作用,接着分析Netty的核心原理和核心组件,基于Netty手写一个消息推送系统并进行性能调优,Z后介绍设计模式在Netty中的应用和经典的面试题分析。如果你想深入了解网络通信原理,如果你还不知道Netty能做什么,如果你想深入了解Netty的实现原理,如果你看源码找不到入口,无从下手,如果你想了解设计模式在Netty中的应用,本书都能帮到你。
作者介绍
谭勇德(Tom)10余年Java开发经验。咕泡学院联合创始人。著有畅销书《Spring 5核心原理与30个类手写实战》。在大型IT公司担任过CTO、系统架构师。精通Java、JS、CSS、AS、PHP等;负责过多个大型分布式系统的微服务架构的技术改造;多年来对Netty框架有深入研究及D特见解;开发过多套企业内部UI框架和ORM框架;热衷于分享经验,共同进步。格言:不只做一个技术者,更要做一个思考者。
关联推荐
如果你想深入了解网络通信原理,如果你还不知道Netty能做什么,如果你想深入了解Netty的实现原理,如果你看源码找不到入口,无从下手,如果你想了解设计模式在Netty中的应用,本书都能帮到你。
目录
目录
D 1 篇 I/O 基础篇
D 1 章 网络通信原理 2
11 网络基础架构 2
111 C/S 架构 2
112 C/S 信息传输流程 2
12 TCP/IP 五层模型详解 3
121 物理层 3
122 数据链路层 4
123 网络层 5
124 传输层 10
125 应用层 15
126 小结 16
13 网络通信实现原理 18
14 向浏览器输入 URL 后发生了什么 19
15 网络通信之“魂”——Socket 21
D 2 章 Java I/O 演进之路 23
21 I/O 的问世 23
211 什么是 I/O 23
212 I/O 交互流程 24
22 五种 I/O 通信模型 25
221 阻塞 I/O 模型 25
222 非阻塞 I/O 模型 26
223 多路复用 I/O 模型 27
224 信号驱动 I/O 模型 28
225 异步 I/O 模型 28
226 易混淆的概念澄清 29
227 各 I/O 模型的对比与zong结 32
23 从 BIO 到 NIO 的演进 33
231 面向流与面向缓冲 33
232 阻塞与非阻塞 33
233 选择器在 I/O 中的应用 34
234 NIO 和 BIO 如何影响应用程序的设计 34
24 Java AIO 详解 37
241 AIO 基本原理 37
242 AIO 初体验 38
D 2 篇 Netty 初体验
D 3 章 Netty 与 NIO 之前世今生 44
31 Java NIO 三件套 44
311 缓冲区 44
312 选择器 54
313 通道 58
32 NIO 源码初探 63
33 反应堆 69
34 Netty 与 NIO 70
341 Netty 支持的功能与特性 70
342 Netty 采用 NIO 而非 AIO 的理由 71
D 4 章 基于 Netty 手写 Tomcat 72
41 环境准备 72
411 定义 GPServlet 抽象类 72
412 创建用户业务代码 73
413 完成 webproperties 配置 74
42 基于传统 I/O 手写 Tomcat 74
421 创建 GPRequest 对象 74
422 创建 GPResponse 对象 76
423 创建 GPTomcat 启动类 77
43 基于 Netty 重构 Tomcat 实现 80
431 重构 GPTomcat 逻辑 80
432 重构 GPRequest 逻辑 83
433 重构 GPResponse 逻辑 84
434 运行效果演示 85
D 5 章 基于 Netty 重构 RPC 框架 87
51 RPC 概述 87
52 环境预设 88
53 代码实战 91
531 创建 API 模块 91
532 创建自定义协议 91
533 实现 Provider 业务逻辑 92
534 完成 Registry 服务注册 93
535 实现 Consumer 远程调用 97
536 Monitor 监控 101
54 运行效果演示 102
D 3 篇 Netty 核心篇
D 6 章 Netty 高性能之道 104
61 背景介绍 104
611 Netty 惊人的性能数据 104
612 传统 RPC 调用性能差的“三宗罪” 104
613 Netty 高性能的三个主题 105
62 Netty 高性能之核心法宝 106
621 异步非阻塞通信 106
622 零拷贝 108
623 内存池 112
624 高效的 Reactor 线程模型 116
625 无锁化的串行设计理念 118
626 高效的并发编程 119
627 对高性能的序列化框架的支持 119
628 灵活的 TCP 参数配置能力 120
D 7 章 揭开 Bootstrap 的神秘面纱 124
71 客户端 Bootstrap 124
711 Channel 简介 124
712 NioSocketChannel 的创建 125
713 客户端 Channel 的初始化 127
714 Unsafe 属性的初始化 130
715 ChannelPipeline 的初始化 131
716 EventLoop 的初始化 132
717 将 Channel 注册到 Selector 137
718 Handler 的添加过程 139
719 客户端发起连接请求 141
72 服务端 ServerBootstrap 144
721 NioServerSocketChannel 的创建 146
722 服务端 Channel 的初始化 146
723 服务端 ChannelPipeline 的初始化 149
724 将服务端 Channel 注册到 Selector 149
725 bossGroup 与 workerGroup 149
726 服务端 Selector 事件轮询 152
727 Netty 解决 JDK 空轮询 Bug 154
728 Netty 对 Selector 中 KeySet 的优化 157
729 Handler 的添加过程 160
D 8 章 大名鼎鼎的 EventLoop 164
81 EventLoopGroup 与 Reactor 164
811 再谈 Reactor 线程模型 164
812 EventLoopGroup 与 Reactor 关联 166
813 EventLoopGroup 的实例化 167
82 任务执行者 EventLoop 169
821 NioEventLoop 的实例化过程 170
822 EventLoop 与 Channel 的关联 171
823 EventLoop 的启动 172
D 9 章 Netty 大动脉 Pipeline 176
91 Pipeline 设计原理 176
911 Channel 与 ChannelPipeline 176
912 再谈 ChannelPipeline 的初始化 177
913 ChannelInitializer 的添加 178
914 自定义 ChannelHandler 的添加过程 181
915 给 ChannelHandler 命名 184
916 ChannelHandler 的默认命名规则 185
92 Pipeline 的事件传播机制 186
921 Outbound 事件传播方式 194
922 Inbound 事件传播方式 196
923 小结 199
93 Handler 的各种“姿势” 200
931 ChannelHandlerContext 200
932 Channel 的生命周期 201
933 ChannelHandler 常用的 API 201
934 ChannelInboundHandler 202
D 10 章 异步处理双子星 Future 与 Promise 204
101 异步结果 Future 204
102 异步执行 Promise 205
D 11 章 Netty 内存分配 ByteBuf 209
111 初识 ByteBuf 209
1111 ByteBuf 的基本结构 209
1112 ByteBuf 的重要 API 210
1113 ByteBuf 的基本分类 213
112 ByteBufAllocator 内存管理器 214
113 非池化内存分配 218
1131 堆内内存的分配 218
1132 堆外内存的分配 221
114 池化内存分配 224
1141 PooledByteBufAllocator 简述 224
1142 DirectArena 内存分配流程 229
1143 内存池的内存规格 231
1144 命中缓存的分配 231
1145 Page 级别的内存分配 241
1146 SubPage 级别的内存分配 254
1147 内存池 ByteBuf 的内存回收 268
1148 SocketChannel 读取 ByteBuf 的过程 273
D 12 章 Netty 编解码的艺术 281
121 什么是拆包、粘包 281
1211 TCP 拆包、粘包 281
1212 粘包问题的解决策略 282
122 什么是编解码 282
1221 编解码技术 282
1222 Netty 为什么要提供编解码框架 283
123 Netty 中常用的解码器 284
1231 ByteToMessageDecoder 抽象解码器 284
1232 LineBasedFrameDecoder 行解码器 289
1233 DelimiterBasedFrameDecoder 分隔符解码器 296
1234 FixedLengthFrameDecoder 固定长度解码器 302
1235 LengthFieldBasedFrameDecoder 通用解码器 303
124 Netty 编码器原理和数据输出 307
1241 WriteAndFlush 事件传播 307
1242 MessageToByteEncoder 抽象编码器 311
1243 写入 Buffer 队列 312
1244 刷新 Buffer 队列 316
1245 数据输出回调 322
125 自定义编解码 335
1251 MessageToMessageDecoder 抽象解码器 335
1252 MessageToMessageEncoder 抽象编码器 336
1253 ObjectEncoder 序列化编码器 337
1254 LengthFieldPrepender 通用编码器 338
D 4 篇 Netty 实战篇
D 13 章 基于 Netty 手写消息推送系统 342
131 环境搭建 342
132 多协议通信设计 343
1321 自定义协议规则 343
1322 自定义编解码器 346
1323 对 HTTP 的支持 349
1324 对自定义协议的支持 351
1325 对 WebSocket 协议的支持 351
133 服务端逻辑处理 352
1331 多协议串行处理 352
1332 服务端用户中心 354
134 客户端控制台处理 359
1341 控制台接入代码 359
1342 控制台消息处理 360
135 客户端 Web 页面交互实现 363
1351 Web 页面设计 363
1352 WebSocket 接入 365
1353 登录和退出 366
1354 发送文字信息 367
1355 发送图片表情 368
1356 发送鲜花雨TX 369
D 14 章 Netty 高性能调优工具类解析 371
141 多线程共享 FastThreadLocal 371
1411 FastThreadLocal 的使用和创建 371
1412 FastThreadLocal 的设值 379
142 Recycler 对象回收站 381
1421 Recycler 的使用和创建 381
1422 从 Recycler 中获取对象 386
1423 相同线程内的对象回收 389
1424 不同线程间的对象回收 391
1425 获取不同线程间释放的对象 397
D 15 章 单机百万连接性能调优 405
151 模拟 Netty 单机连接瓶颈 405
152 单机百万连接调优解决思路 410
1521 突破局部文件句柄限制 410
1522 突破全局文件句柄限制 412
153 Netty 应用级别的性能调优 413
1531 Netty 应用级别的性能瓶颈复现 413
1532 Netty 应用级别的性能调优方案 420
D 16 章 设计模式在 Netty 中的应用 422
161 单例模式源码举例 422
162 策略模式源码举例 423
163 装饰者模式源码举例 424
164 观察者模式源码举例 426
165 迭代器模式源码举例 427
166 责任链模式源码举例 428
167 工厂模式源码举例 430
D 17 章 Netty 经典面试题集锦 432
171 基础知识部分 432
1711 TCP 和 UDP 的根本区别 432
1712 TCP 如何保证可靠传输 433
1713 Netty 能解决什么问题 433
1714 选用 Netty 作为通信组件框架的举例 433
1715 Netty 有哪些主要组件,它们之间有什么关联 433
172 GJ特性部分 434
1721 相较同类框架,Netty 有哪些优势 434
1722 Netty 的高性能体现在哪些方面 434
1723 默认情况下 Netty 起多少线程,何时启动 434
1724 Netty 有几种发送消息的方式 434
1725 Netty 支持哪些心跳类型设置 435
1726 Netty 和 Tomcat 的区别 435
1727 在实际应用中,如何确定要使用哪些编解码器 435