Netty权威指南
2021-11-21 16:04:35 0 举报
AI智能生成
Netty权威指南书签
作者其他创作
大纲/内容
封面 1
前言 4
目录 9
基础篇 走进Java NIO 19
第1章 Java的I/O演进之路 20
1.1 I/O基础入门 21
1.1.1 Linux网络I/O模型简介 21
1.1.2 I/O多路复用技术 24
1.2 Java的I/O演进 26
1.3 总结 28
第2章 NIO入门 29
2.1 传统的BIO编程 29
2.1.1 BIO通信模型图 30
2.1.2 同步阻塞式I/O创建的TimeServer源码分析 31
2.1.3 同步阻塞式I/O创建的TimeClient源码分析 34
2.2 伪异步I/O编程 36
2.2.1 伪异步I/O模型图 37
2.2.2 伪异步式I/O创建的TimeServer源码分析 37
2.2.3 伪异步I/O弊端分析 39
2.3 NIO编程 42
2.3.1 NIO类库简介 42
2.3.2 NIO服务端序列图 46
2.3.3 NIO创建的TimeServer源码分析 49
2.3.4 NIO客户端序列图 54
2.3.5 NIO创建的TimeClient源码分析 57
2.4 AIO编程 63
2.4.1 AIO创建的TimeServer源码分析 64
2.4.2 AIO创建的TimeClient源码分析 70
2.4.3 AIO版本时间服务器运行结果 74
2.54 种I/O的对比 76
2.5.1 概念澄清 76
2.5.2 不同I/O模型对比 78
2.6 选择Netty的理由 78
2.6.1 不选择Java原生NIO编程的原因 79
2.6.2 为什么选择Netty 80
2.7 总结 81
入门篇 Netty NIO开发指南
第3章 Netty入门应用 84
3.1 Netty开发环境的搭建 84
3.1.1 下载Netty的软件包 85
3.1.2 搭建Netty应用工程 85
3.2 Netty服务端开发 86
3.3 Netty客户端开发 91
3.4 运行和调试 94
3.4.1 服务端和客户端的运行 94
3.4.2 打包和部署 95
3.5 总结 96
第4章 TCP粘包/拆包问题的解决之道 97
4.1 TCP粘包/拆包 97
4.1.1 TCP粘包/拆包问题说明 98
4.1.2 TCP粘包/拆包发生的原因 98
4.1.3 粘包问题的解决策略 99
4.2 未考虑TCP粘包导致功能异常案例 100
4.2.1 TimeServer的改造 100
4.2.2 TimeClient的改造 101
4.2.3 运行结果 102
4.3 利用LineBasedFrameDecoder解决TCP粘包问题 106
4.3.1 支持TCP粘包的TimeServer 106
4.3.2 支持TCP粘包的TimeClient 108
4.3.3 运行支持TCP粘包的时间服务器程序 111
4.3.4 LineBasedFrameDecoder和StringDecoder的原理分析 116
4.4 总结 117
第5章 分隔符和定长解码器的应用 118
5.1 DelimiterBasedFrameDecoder应用开发 119
5.1.1 DelimiterBasedFrameDecoder服务端开发 119
5.1.2 DelimiterBasedFrameDecoder客户端开发 122
5.1.3 运行DelimiterBasedFrameDecoder服务端和客户端 124
5.2 FixedLengthFrameDecoder应用开发 126
5.2.1 FixedLengthFrameDecoder服务端开发 126
5.2.2 利用telnet命令行测试EchoServer服务端 128
5.3 总结 129
中级篇 Netty编解码开发指南
第6章 编解码技术 132
6.1 Java序列化的缺点 133
6.1.1 无法跨语言 133
6.1.2 序列化后的码流太大 133
6.1.3 序列化性能太低 136
6.2 业界主流的编解码框架 139
6.2.1 Google的Protobuf介绍 139
6.2.2 Facebook的Thrift介绍 141
6.2.3 JBoss Marshalling介绍 142
6.3 总结 143
第7章 Java序列化 144
7.1 Netty Java序列化服务端开发 144
7.2 Java序列化Netty客户端开发 150
7.3 运行结果 153
7.4 总结 155
第8章 Google Protobuf编解码 156
8.1 Protobuf的入门 157
8.1.1 Protobuf开发环境搭建 157
8.1.2 Protobuf编解码开发 159
8.1.3 运行Protobuf例程 161
8.2 Netty的Protobuf服务端开发 161
8.2.1 Protobuf版本的图书订购服务端开发 162
8.2.2 Protobuf版本的图书订购客户端开发 164
8.2.3 Protobuf版本的图书订购程序功能测试 167
8.3 Protobuf的使用注意事项 170
8.4 总结 171
第9章 JBoss Marshalling编解码 172
9.1 Marshalling开发环境准备 172
9.2 Netty的Marshalling服务端开发 173
9.3 Netty的Marshalling客户端开发 176
9.4 运行Marshalling客户端和服务端例程 178
9.5 总结 180
高级篇 Netty多协议开发和应用
第10章 HTTP协议开发应用 182
10.1 HTTP协议介绍 183
10.1.1 HTTP协议的URL 183
10.1.2 HTTP请求消息(HttpRequest) 183
10.1.3 HTTP响应消息(HttpResponse) 186
10.2 Netty HTTP服务端入门开发 187
10.2.1 HTTP服务端例程场景描述 188
10.2.2 HTTP服务端开发 188
10.2.3 Netty HTTP文件服务器例程运行结果 196
10.3 Netty HTTP+XML协议栈开发 200
10.3.1 开发场景介绍 201
10.3.2 HTTP+XML协议栈设计 204
10.3.3 高效的XML绑定框架JiBx 205
10.3.4 HTTP+XML编解码框架开发 213
10.3.5 HTTP+XML协议栈测试 229
10.3.6 小结 231
10.4 总结 232
第11章 WebSocket协议开发 233
11.1 HTTP协议的弊端 234
11.2 WebSocket入门 234
11.2.1 WebSocket背景 235
11.2.2 WebSocket连接建立 236
11.2.3 WebSocket生命周期 237
11.2.4 WebSocket连接关闭 238
11.3 Netty WebSocket协议开发 239
11.3.1 WebSocket服务端功能介绍 239
11.3.2 WebSocket服务端开发 240
11.3.3 运行WebSocket服务端 248
11.4 总结 249
第12章 UDP协议开发 251
12.1 UDP协议简介 252
12.2 UDP服务端开发 253
12.3 UDP客户端开发 256
12.4 运行UDP例程 258
12.5 总结 259
第13章 文件传输 260
13.1 文件的基础知识 261
13.1.1 文件的概念 261
13.1.2 文件路径 261
13.1.3 文件名称 262
13.1.4 FileChannel简介 262
13.2 Netty文件传输开发 263
13.3 运行Netty文件传输服务例程 266
13.4 总结 268
第14章 私有协议栈开发 269
14.1 私有协议介绍 269
14.2 Netty协议栈功能设计 271
14.2.1 网络拓扑图 271
14.2.2 协议栈功能描述 272
14.2.3 通信模型 272
14.2.4 消息定义 273
14.2.5 Netty协议支持的字段类型 274
14.2.6 Netty协议的编解码规范 275
14.2.7 链路的建立 277
14.2.8 链路的关闭 278
14.2.9 可靠性设计 278
14.2.10 安全性设计 280
14.2.11 可扩展性设计 280
14.3 Netty协议栈开发 281
14.3.1 数据结构定义 281
14.3.2 消息编解码 285
14.3.3 握手和安全认证 289
14.3.4 心跳检测机制 293
14.3.5 断连重连 296
14.3.6 客户端代码 297
14.3.7 服务端代码 299
14.4 运行协议栈 300
14.4.1 正常场景 300
14.4.2 异常场景:服务端宕机重启 301
14.4.3 异常场景:客户端宕机重启 304
14.5 总结 304
源码分析篇 Netty功能介绍和源码分析
第15章 ByteBuf和相关辅助类 308
15.1 ByteBuf功能说明 308
15.1.1 ByteBuf的工作原理 309
15.1.2 ByteBuf的功能介绍 314
15.2 ByteBuf源码分析 328
15.2.1 ByteBuf的主要类继承关系 329
15.2.2 AbstractByteBuf源码分析 330
15.2.3 AbstractReferenceCountedByteBuf源码分析 339
15.2.4 UnpooledHeapByteBuf源码分析 341
15.2.5 PooledByteBuf内存池原理分析 346
15.2.6 PooledDirectByteBuf源码分析 349
15.3 ByteBuf相关的辅助类功能介绍 352
15.3.1 ByteBufHolder 352
15.3.2 ByteBufAllocator 353
15.3.3 CompositeByteBuf 354
15.3.4 ByteBufUtil 356
15.4 总结 357
第16章 Channel和Unsafe 358
16.1 Channel 功能说明 358
16.1.1 Channel的工作原理 359
16.1.2 Channel的功能介绍 360
16.2 Channel源码分析 363
16.2.1 Channel的主要继承关系类图 363
16.2.2 AbstractChannel源码分析 364
16.2.3 AbstractNioChannel源码分析 367
16.2.4 AbstractNioByteChannel源码分析 370
16.2.5 AbstractNioMessageChannel源码分析 374
16.2.6 AbstractNioMessageServerChannel源码分析 375
16.2.7 NioServerSocketChannel源码分析 376
16.2.8 NioSocketChannel源码分析 378
16.3 Unsafe功能说明 384
16.4 Unsafe源码分析 385
16.4.1 Unsafe继承关系类图 385
16.4.2 AbstractUnsafe源码分析 385
16.4.3 AbstractNioUnsafe源码分析 395
16.4.4 NioByteUnsafe源码分析 398
16.5 总结 405
第17章 ChannelPipeline和ChannelHandler 407
17.1 ChannelPipeline功能说明 408
17.1.1 ChannelPipeline的事件处理 408
17.1.2 自定义拦截器 410
17.1.3 构建pipeline 411
17.1.4 ChannelPipeline的主要特性 412
17.2 ChannelPipeline源码分析 412
17.2.1 ChannelPipeline的类继承关系图 412
17.2.2 ChannelPipeline对ChannelHandler的管理 412
17.2.3 ChannelPipeline的inbound事件 415
17.2.4 ChannelPipeline的outbound事件 416
17.3 ChannelHandler功能说明 417
17.3.1 ChannelHandlerAdapter功能说明 418
17.3.2 ByteToMessageDecoder功能说明 418
17.3.3 MessageToMessageDecoder功能说明 419
17.3.4 LengthFieldBasedFrameDecoder功能说明 420
17.3.5 MessageToByteEncoder功能说明 423
17.3.6 MessageToMessageEncoder功能说明 424
17.3.7 LengthFieldPrepender功能说明 424
17.4 ChannelHandler源码分析 425
17.4.1 ChannelHandler的类继承关系图 425
17.4.2 ByteToMessageDecoder源码分析 426
17.4.3 MessageToMessageDecoder源码分析 429
17.4.4 LengthFieldBasedFrameDecoder源码分析 431
17.4.5 MessageToByteEncoder源码分析 435
17.4.6 MessageToMessageEncoder源码分析 436
17.4.7 LengthFieldPrepender源码分析 437
17.5 总结 438
第18章 EventLoop和EventLoopGroup 439
18.1 Netty的线程模型 439
18.1.1 Reactor单线程模型 440
18.1.2 Reactor多线程模型 441
18.1.3 主从Reactor多线程模型 442
18.1.4 Netty的线程模型 443
18.1.5 最佳实践 445
18.2 NioEventLoop源码分析 445
18.2.1 NioEventLoop设计原理 445
18.2.2 NioEventLoop继承关系类图 446
18.2.3 NioEventLoop 447
18.3 总结 458
第19章 Future和Promise 459
19.1 Future功能 459
19.2 ChannelFuture源码分析 464
19.3 Promise功能介绍 466
19.4 Promise源码分析 468
19.4.1 Promise继承关系图 468
19.4.2 DefaultPromise 468
19.5 总结 471
架构和行业应用篇 Netty高级特性
第20章 Java多线程编程在Netty中的应用 474
20.1 Java内存模型与多线程编程 474
20.1.1 硬件的发展和多任务处理 474
20.1.2 Java内存模型 475
20.2 Netty的并发编程实践 477
20.2.1 对共享的可变数据进行正确的同步 477
20.2.2 正确的使用锁 478
20.2.3 volatile的正确使用 480
20.2.4 CAS指令和原子类 483
20.2.5 线程安全类的应用 485
20.2.6 读写锁的应用 488
20.2.7 线程安全性文档说明 490
20.2.8 不要依赖线程优先级 491
20.3 总结 492
第21章 Netty架构剖析 493
21.1 Netty逻辑架构 493
21.1.1 Reactor通信调度层 494
21.1.2 职责链ChannelPipeline 494
21.1.3 业务逻辑编排层(Service ChannelHandler) 495
21.2 关键架构质量属性 495
21.2.1 高性能 495
21.2.2 可靠性 498
21.2.3 可定制性 501
21.2.4 可扩展性 501
21.3 总结 501
第22章 Netty行业应用 502
22.1 Netty在互联网行业的应用 503
22.1.1 传统垂直架构面临的问题 503
22.1.2 阿里分布式服务框架Dubbo 503
22.1.3 Dubbo的架构介绍 505
22.1.4 Netty在Dubbo中的应用 507
22.1.5 Dubbo框架集成Netty源码分析 509
22.2 Netty在大数据领域的应用 514
22.3 Netty在游戏行业的应用 515
22.3.1 游戏服务端架构介绍 516
22.3.2 Netty在游戏服务端的应用 519
22.4 总结 520
第23章 Netty未来展望 521
23.1 应用范围 521
23.2 技术演进 522
23.3 社区活跃度 522
23.4 Road Map 522
23.5 总结 523
附录A Netty参数配置表 524
0 条评论
下一页