《Netty权威指南》目录

    xiaoxiao2024-03-29  7

    《Netty权威指南》是全球第二本、中国第一本Netty教材,它由华为平台中间件资深架构设计师李林锋撰写,作者有6年多的NIO设计和开发实战经验,多次受邀进行Netty和 NIO编程培训。

    本书基于最新的Netty5.0 版本撰写,从Netty开发环境的搭建,到第一个基于Netty的NIO服务端和客户端程序的开发,一步步的让读者从入门到精通,熟练的掌握基于Netty 的NIO开发,理解Netty的架构设计原理,可以对Netty进行深度的定制设计和开发。

    本书共分为五部分:第一部分介绍 JAVA NIO的入门知识,包括 Java NIO的演进和NIO编程入门。第二部分是Netty入门,包括Netty开发环境的搭建、第一个服务端和客户端的开发与调试。第三部分对Netty的编解码模块进行了详细介绍,包括编解码的基础知识、Java序列化、Google ProtoBuf和Jboss Marshalling序列化框架的应用;第四部分是Netty多协议开发,详细介绍了基于Netty的HTTP协议、WebSocket协议、UDP协议和文件传输的设计和开发,最后讲解了如何利用Netty进行私有协议栈的设计和开发。

    第五部分对Netty的主要类库源码进行了分析,包括ByteBuf和Unsafe、ChannelPipeline和ChannelHandler、EventLoop和EventLoopGroup、Future和Promise。第六部分介绍了Netty的高级应用,包括Java多线程编程在Netty中的应用、Netty的架构剖析、Netty在互联网行业的应用、Netty在大数据领域的应用,最后是Netty的未来展望。 附录包含了Netty的启动参数配置列表。

    下面是本书的目录:

    Netty权威指南…………………………………………………………………………………………………. 1

    第 1章 Java的IO演进之路……………………………………………………………………………… 10

    1.1. IO基础入门……………………………………………………………………………………… 11

    1.1.1. Linux网络IO模型简介…………………………………………………………….. 11

    1.1.2. IO多路复用技术……………………………………………………………………… 14

    1.2. Java的IO演进…………………………………………………………………………………. 15

    1.2.1. Java的IO发展简史…………………………………………………………………. 15

    1.3. 总结………………………………………………………………………………………………… 16

    第 2 章NIO入门…………………………………………………………………………………………… 17

    2.1. 传统的BIO编程……………………………………………………………………………….. 18

    2.1.1. BIO通信模型图……………………………………………………………………….. 18

    2.1.2. 同步阻塞式IO创建的TimeServer源码分析………………………………… 18

    2.1.3. 同步阻塞式IO创建的TimeClient源码分析………………………………… 22

    2.2. 伪异步IO编程…………………………………………………………………………………. 24

    2.2.1. 伪异步IO模型图…………………………………………………………………….. 25

    2.2.2. 伪异步式IO创建的TimeServer源码分析……………………………………. 25

    2.2.3. 伪异步IO弊端分析………………………………………………………………….. 28

    2.3. NIO编程…………………………………………………………………………………………. 30

    2.3.1. NIO类库简介…………………………………………………………………………… 31

    2.3.2. NIO服务端序列图……………………………………………………………………. 34

    2.3.3. NIO创建的TimeServer源码分析……………………………………………….. 36

    2.3.4. NIO客户端序列图……………………………………………………………………. 42

    2.3.5. NIO创建的TimeClient源码分析……………………………………………….. 45

    2.4. AIO编程…………………………………………………………………………………………. 51

    2.4.1. AIO 创建的TimeServer源码分析………………………………………………. 51

    2.4.2. AIO创建的TimeClient源码分析……………………………………………….. 57

    2.4.3. AIO版本时间服务器运行结果……………………………………………………. 62

    2.5. 4种IO的对比………………………………………………………………………………….. 64

    2.5.1. 概念澄清………………………………………………………………………………… 64

    2.5.2. 不同IO模型对比…………………………………………………………………….. 65

    2.6. 选择Netty的理由……………………………………………………………………………… 66

    2.6.1. 不选择JAVA原生NIO编程的原因………………………………………………. 66

    2.6.2. 为什么选择Netty……………………………………………………………………. 68

    2.7. 总结………………………………………………………………………………………………… 68

    第 3 章Netty入门应用…………………………………………………………………………………… 70

    3.1. Netty开发环境的搭建……………………………………………………………………….. 71

    3.1.1. 下载Netty的软件包………………………………………………………………… 71

    3.1.2. 搭建Netty应用工程………………………………………………………………… 72

    3.2. Netty服务端开发………………………………………………………………………………. 73

    3.2.1. TimeServer开发……………………………………………………………………… 73

    3.3. Netty客户端开发………………………………………………………………………………. 77

    3.3.1. TimeClient开发……………………………………………………………………… 77

    3.4. 运行和调试………………………………………………………………………………………. 81

    3.4.1. 服务端和客户端的运行…………………………………………………………….. 81

    3.4.2. 打包和部署…………………………………………………………………………….. 82

    3.5. 总结………………………………………………………………………………………………… 82

    第 4 章TCP粘包/拆包问题的解决之道…………………………………………………………….. 83

    4.1. TCP粘包/拆包………………………………………………………………………………….. 84

    4.1.1. TCP粘包/拆包问题说明……………………………………………………………. 84

    4.1.2. TCP粘包/拆包发生的原因…………………………………………………………. 85

    4.1.3. 粘包问题的解决策略………………………………………………………………… 85

    4.2. 未考虑TCP粘包导致功能异常的案例………………………………………………….. 86

    4.2.1. TimeServer的改造…………………………………………………………………… 86

    4.2.2. TimeClient的改造…………………………………………………………………… 87

    4.2.3. 运行结果………………………………………………………………………………… 89

    4.3. 利用LineBasedFrameDecoder解决TCP粘包问题…………………………………… 91

    4.3.1. 支持TCP粘包的TimeServer……………………………………………………… 92

    4.3.2. 支持TCP粘包的TimeClient……………………………………………………… 95

    4.3.3. 运行支持TCP粘包的时间服务器程序………………………………………….. 98

    4.3.4. LineBasedFrameDecoder和StringDecoder的原理分析……………….. 103

    4.4. 总结………………………………………………………………………………………………. 103

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

    5.1. DelimiterBasedFrameDecoder应用开发……………………………………………….. 105

    5.1.1. DelimiterBasedFrameDecoder服务端开发…………………………………. 105

    5.1.2. DelimiterBasedFrameDecoder客户端开发…………………………………. 108

    5.1.3. 运行DelimiterBasedFrameDecoder服务端和客户端程序……………… 111

    5.2. FixedLengthFrameDecoder应用开发…………………………………………………… 112

    5.2.1. FixedLengthFrameDecoder服务端开发……………………………………… 112

    5.2.2. 利用telnet命令行测试EchoServer服务端……………………………….. 115

    5.3. 总结………………………………………………………………………………………………. 116

    第 6 章编解码介绍………………………………………………………………………………………. 118

    6.1. Java序列化的缺点…………………………………………………………………………… 119

    6.1.1. 无法跨语言……………………………………………………………………………. 119

    6.1.2. 序列化后的码流太大………………………………………………………………. 119

    6.1.3. 序列化性能太低…………………………………………………………………….. 122

    6.2. 业界主流的编解码框架简介………………………………………………………………. 125

    6.2.1. Google的Protobuf介绍…………………………………………………………. 125

    6.2.2. FaceBook的Thrift介绍…………………………………………………………. 127

    6.2.3. Jboss Marshalling介绍…………………………………………………………. 128

    6.3. 总结………………………………………………………………………………………………. 128

    第 7 章Java序列化………………………………………………………………………………………. 129

    7.1. Netty Java序列化服务端开发…………………………………………………………….. 130

    7.1.1. 服务端开发例程…………………………………………………………………….. 130

    7.2. Java序列化Netty客户端开发……………………………………………………………. 138

    7.2.1. 客户端开发例程…………………………………………………………………….. 139

    7.3. 运行结果………………………………………………………………………………………… 142

    7.3.1. 运行Java序列化例程…………………………………………………………….. 142

    7.4. 总结………………………………………………………………………………………………. 144

    第 8 章Google Protobuf编解码……………………………………………………………………… 145

    8.1. Protobuf的入门………………………………………………………………………………. 146

    8.1.1. Protobuf开发环境搭建…………………………………………………………… 146

    8.1.2. Protobuf编解码开发……………………………………………………………… 149

    8.1.3. 运行Protobuf例程………………………………………………………………… 150

    8.2. Netty的Protobuf服务端开发…………………………………………………………….. 151

    8.2.1. Protobuf版本的图书订购服务端开发……………………………………….. 151

    8.2.2. Protobuf版本的图书订购客户端开发……………………………………….. 154

    8.2.3. Protobuf版本的图书订购程序功能测试……………………………………. 158

    8.3. Protobuf的使用注意事项………………………………………………………………….. 161

    8.4. 总结………………………………………………………………………………………………. 162

    第 9 章Jboss Marshalling 编解码…………………………………………………………………… 163

    9.1. Marshalling开发环境准备…………………………………………………………………. 163

    9.2. Netty的Marshalling服务端开发………………………………………………………… 164

    9.2.1. 服务端开发示例…………………………………………………………………….. 164

    9.3. Netty的Marshalling客户端开发………………………………………………………… 167

    9.3.1. 客户端开发示例…………………………………………………………………….. 167

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

    9.5. 总结………………………………………………………………………………………………. 171

    第 10 章HTTP协议开发应用………………………………………………………………………… 173

    10.1. HTTP协议介绍……………………………………………………………………………… 174

    10.1.1. HTTP协议的URL……………………………………………………………………. 174

    10.1.2. HTTP请求消息(HttpRequest)……………………………………………… 174

    10.1.3. HTTP请求响应消息(HttpResponse)……………………………………… 177

    10.2. Netty HTTP服务端入门开发……………………………………………………………. 178

    10.2.1. HTTP服务端例程场景描述……………………………………………………… 179

    10.2.2. HTTP服务端开发…………………………………………………………………… 179

    10.2.3. Netty HTTP文件服务器例程运行结果……………………………………… 189

    10.3. Netty HTTP+XML协议栈开发…………………………………………………………. 194

    10.3.1. 开发场景介绍………………………………………………………………………. 195

    10.3.2. HTTP+XML协议栈设计……………………………………………………………. 198

    10.3.3. 高效的XML绑定框架JiBx……………………………………………………… 199

    10.3.4. HTTP+XML编解码框架开发……………………………………………………… 209

    10.3.5. HTTP+XML协议栈测试……………………………………………………………. 229

    10.3.6. 小结…………………………………………………………………………………… 231

    10.4. 总结…………………………………………………………………………………………….. 231

    第 11 章WebSocket 协议开发应用…………………………………………………………………. 232

    11.1. HTTP协议的弊端………………………………………………………………………….. 233

    11.2. WebSocket入门……………………………………………………………………………… 233

    11.2.1. WebSocket背景……………………………………………………………………. 234

    11.2.2. WebSocket连接建立……………………………………………………………… 234

    11.2.3. WebSocket生命周期……………………………………………………………… 236

    11.2.4. WebSocket连接关闭……………………………………………………………… 236

    11.3. Netty WebSocket应用开发………………………………………………………………. 237

    11.3.1. WebSocket服务端功能介绍……………………………………………………. 237

    11.3.2. WebSocket服务端开发…………………………………………………………… 239

    11.3.3. 运行WebSocket服务端………………………………………………………….. 246

    11.4. 总结…………………………………………………………………………………………….. 247

    第 12 章UDP协议开发应用………………………………………………………………………….. 249

    12.1. UDP协议简介……………………………………………………………………………….. 250

    12.2. UDP服务端开发……………………………………………………………………………. 251

    12.3. UDP客户端开发……………………………………………………………………………. 253

    12.4. 运行UDP流程………………………………………………………………………………. 255

    12.5. 总结…………………………………………………………………………………………….. 256

    第 13 章文件传输……………………………………………………………………………………….. 257

    13.1. 文件的基础知识…………………………………………………………………………….. 258

    13.1.1. 文件的概念………………………………………………………………………….. 258

    13.1.2. 文件路径…………………………………………………………………………….. 258

    13.1.3. 文件名称…………………………………………………………………………….. 258

    13.1.4. FileChannel简介…………………………………………………………………. 259

    13.2. Netty文件传输开发……………………………………………………………………….. 260

    13.3. 运行Netty文件传输服务例程………………………………………………………….. 263

    13.4. 总结…………………………………………………………………………………………….. 264

    第 14 章私有协议栈开发………………………………………………………………………………. 266

    14.1. 私有协议介绍………………………………………………………………………………… 267

    14.2. Netty协议栈功能设计…………………………………………………………………….. 267

    14.2.1. 网络拓扑图………………………………………………………………………….. 268

    14.2.2. 协议栈功能描述…………………………………………………………………… 268

    14.2.3. 通信模型…………………………………………………………………………….. 269

    14.2.4. 消息定义…………………………………………………………………………….. 270

    14.2.5. Netty协议支持的字段类型……………………………………………………. 271

    14.2.6. Netty协议的编解码规范……………………………………………………….. 271

    14.2.7. 链路的建立………………………………………………………………………….. 273

    14.2.8. 链路的关闭………………………………………………………………………….. 274

    14.2.9. 可靠性设计………………………………………………………………………….. 274

    14.2.10. 安全性设计………………………………………………………………………… 276

    14.2.11. 可扩展性设计…………………………………………………………………….. 276

    14.3. Netty协议栈开发…………………………………………………………………………… 277

    14.3.1. 数据结构定义………………………………………………………………………. 277

    14.3.2. 消息编解码………………………………………………………………………….. 280

    14.3.3. 握手和安全认证…………………………………………………………………… 285

    14.3.4. 心跳检测机制………………………………………………………………………. 289

    14.3.5. 断连重连…………………………………………………………………………….. 292

    14.3.6. 客户端代码………………………………………………………………………….. 292

    14.3.7. 服务端代码………………………………………………………………………….. 294

    14.4. 运行协议栈…………………………………………………………………………………… 295

    14.4.1. 正常场景…………………………………………………………………………….. 295

    14.4.2. 异常场景:服务端宕机重启…………………………………………………… 296

    14.4.3. 异常场景:客户端宕机重启…………………………………………………… 299

    14.5. 总结…………………………………………………………………………………………….. 300

    第 15 章ByteBuf 和相关辅助类…………………………………………………………………… 302

    15.1. ByteBuf 功能说明…………………………………………………………………………. 303

    15.1.1. ByteBuf的工作原理……………………………………………………………… 304

    15.1.2. ByteBuf的功能介绍……………………………………………………………… 308

    15.2. ByteBuf源码分析………………………………………………………………………….. 323

    15.2.1. ByteBuf的主要类继承关系……………………………………………………. 323

    15.2.2. AbstractByteBuf源码分析……………………………………………………. 324

    15.2.3. AbstractReferenceCountedByteBuf源码分析…………………………… 333

    15.2.4. UnpooledHeapByteBuf源码分析……………………………………………… 335

    15.2.5. PooledByteBuf内存池原理分析……………………………………………… 340

    15.2.6. PooledDirectByteBuf源码分析……………………………………………… 343

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

    15.3.1. ByteBufHolder…………………………………………………………………….. 345

    15.3.2. ByteBufAllocator………………………………………………………………… 346

    15.3.3. CompositeByteBuf………………………………………………………………… 347

    15.3.4. ByteBufUtil………………………………………………………………………… 349

    15.4. 总结…………………………………………………………………………………………….. 350

    第 16 章Channel 和 Unsafe………………………………………………………………………….. 351

    16.1. Channel 功能说明…………………………………………………………………………. 352

    16.1.1. Channel的工作原理……………………………………………………………… 352

    16.1.2. Channel的功能介绍……………………………………………………………… 352

    16.2. Channel源码分析………………………………………………………………………….. 355

    16.2.1. Channel的主要继承关系图……………………………………………………. 356

    16.2.2. AbstractChannel源码分析……………………………………………………. 357

    16.2.3. AbstractNioChannel源码分析……………………………………………….. 359

    16.2.4. AbstractNioByteChannel源码分析…………………………………………. 362

    16.2.5. AbstractNioMessageChannel源码分析……………………………………. 365

    16.2.6. AbstractNioMessageServerChannel源码分析…………………………… 367

    16.2.7. NioServerSocketChannel源码分析…………………………………………. 367

    16.2.8. NioSocketChannel源码分析…………………………………………………… 370

    16.3. Unsafe功能说明…………………………………………………………………………….. 375

    16.4. Unsafe源码分析…………………………………………………………………………….. 376

    16.4.1. Unsafe继承关系类图……………………………………………………………. 376

    16.4.2. AbstractUnsafe源码分析……………………………………………………… 377

    16.4.3. AbstractNioUnsafe源码分析…………………………………………………. 386

    16.4.4. NioByteUnsafe源码分析……………………………………………………….. 389

    16.5. 总结…………………………………………………………………………………………….. 396

    第 17 章ChannelPipeline和ChannelHandler…………………………………………………….. 397

    17.1. ChannelPipeline功能说明……………………………………………………………….. 398

    17.1.1. ChannelPipeline的事件处理…………………………………………………. 398

    17.1.2. 自定义拦截器………………………………………………………………………. 400

    17.1.3. 构建pipeline……………………………………………………………………… 401

    17.1.4. ChannelPipeline的主要特性…………………………………………………. 401

    17.2. ChannelPipeline源码分析……………………………………………………………….. 402

    17.2.1. ChannelPipeline的类继承关系图…………………………………………… 402

    17.2.2. ChannelPipeline对ChannelHandler的管理…………………………….. 402

    17.2.3. ChannelPipeline的inbound事件…………………………………………… 405

    17.2.4. ChannelPipeline的outbound事件…………………………………………. 406

    17.3. ChannelHandler功能说明………………………………………………………………… 407

    17.3.1. ChannelHandlerAdapter功能说明…………………………………………… 407

    17.3.2. ByteToMessageDecoder功能说明……………………………………………. 408

    17.3.3. MessageToMessageDecoder功能说明……………………………………….. 408

    17.3.4. LengthFieldBasedFrameDecoder功能说明……………………………….. 409

    17.3.5. MessageToByteEncoder功能说明……………………………………………. 412

    17.3.6. MessageToMessageEncoder功能说明……………………………………….. 413

    17.3.7. LengthFieldPrepender功能说明……………………………………………. 413

    17.4. ChannelHandler源码分析………………………………………………………………… 414

    17.4.1. ChannelHandler的类继承关系图……………………………………………. 414

    17.4.2. ByteToMessageDecoder源码分析……………………………………………. 415

    17.4.3. MessageToMessageDecoder源码分析……………………………………….. 418

    17.4.4. LengthFieldBasedFrameDecoder源码分析……………………………….. 419

    17.4.5. MessageToByteEncoder源码分析……………………………………………. 424

    17.4.6. MessageToMessageEncoder源码分析……………………………………….. 424

    17.4.7. LengthFieldPrepender源码分析……………………………………………. 426

    17.5. 总结…………………………………………………………………………………………….. 427

    第 18 章EventLoop和 EventLoopGroup…………………………………………………………. 428

    18.1. Netty的线程模型…………………………………………………………………………… 429

    18.1.1. Reactor单线程模型……………………………………………………………… 429

    18.1.2. Reactor多线程模型……………………………………………………………… 430

    18.1.3. 主从Reactor多线程模型………………………………………………………. 431

    18.1.4. Netty的线程模型…………………………………………………………………. 432

    18.1.5. 最佳实践…………………………………………………………………………….. 433

    18.2. NioEventLoop源码分析………………………………………………………………….. 434

    18.2.1. NioEventLoop设计原理…………………………………………………………. 434

    18.2.2. NioEventLoop继承关系类图…………………………………………………… 435

    18.2.3. NioEventLoop………………………………………………………………………. 435

    18.3. 总结…………………………………………………………………………………………….. 445

    第 19 章Future和 Promise……………………………………………………………………………. 446

    19.1. Future功能…………………………………………………………………………………… 447

    19.1.1. ChannelFuture功能介绍……………………………………………………….. 447

    19.2. ChannelFuture源码分析…………………………………………………………………. 451

    19.2.1. AbstractFuture…………………………………………………………………… 452

    19.3. Promise功能介绍…………………………………………………………………………… 453

    19.4. Promise 源码分析………………………………………………………………………….. 455

    19.4.1. Promise继承关系图……………………………………………………………… 455

    19.4.2. DefaultPromise…………………………………………………………………… 456

    19.5. 总结…………………………………………………………………………………………….. 458

    第 20 章Java多线程编程在Netty中的应用……………………………………………………… 460

    20.1. JAVA内存模型与多线程编程…………………………………………………………… 461

    20.1.1. 硬件的发展和多任务处理………………………………………………………. 461

    20.1.2. JAVA内存模型……………………………………………………………………… 461

    20.2. Netty的并发编程实践…………………………………………………………………….. 463

    20.2.1. 对共享的可变数据进行正确的同步………………………………………….. 463

    20.2.2. 正确的使用锁………………………………………………………………………. 464

    20.2.3. volatile的正确使用……………………………………………………………. 465

    20.2.4. CAS指令和原子类…………………………………………………………………. 468

    20.2.5. 线程安全类的应用………………………………………………………………… 470

    20.2.6. 读写锁的应用………………………………………………………………………. 473

    20.2.7. 线程安全性文档说明…………………………………………………………….. 475

    20.2.8. 不要依赖线程优先级…………………………………………………………….. 475

    20.3. 总结…………………………………………………………………………………………….. 476

    第 21 章Netty的架构剖析…………………………………………………………………………….. 477

    21.1. Netty逻辑架构………………………………………………………………………………. 478

    21.1.1. Reactor通信调度层……………………………………………………………… 478

    21.1.2. 职责链ChannelPipeline……………………………………………………….. 478

    21.1.3. 业务逻辑编排层(Service ChannelHandler)………………………….. 479

    21.2. 关键架构质量属性…………………………………………………………………………. 479

    21.2.1. 高性能………………………………………………………………………………… 479

    21.2.2. 可靠性………………………………………………………………………………… 482

    21.2.3. 可定制性…………………………………………………………………………….. 485

    21.2.4. 可扩展性…………………………………………………………………………….. 485

    21.3. 总结…………………………………………………………………………………………….. 486

    第 22 章Netty的行业应用…………………………………………………………………………….. 487

    22.1. Netty在互联网行业的应用………………………………………………………………. 488

    22.1.1. 传统垂直架构面临的问题………………………………………………………. 488

    22.1.2. 阿里分布式服务框架Dubbo……………………………………………………. 488

    22.1.3. Dubbo的架构介绍…………………………………………………………………. 489

    22.1.4. Netty在Dubbo中的应用……………………………………………………….. 492

    22.1.5. Dubbo框架集成Netty源码分析……………………………………………… 494

    22.2. Netty在大数据领域的应用………………………………………………………………. 498

    22.3. Netty在游戏行业的应用…………………………………………………………………. 499

    22.3.1. 游戏服务端架构介绍…………………………………………………………….. 499

    22.3.2. Netty在游戏服务端的应用……………………………………………………. 503

    22.4. 总结…………………………………………………………………………………………….. 504

    第 23 章Netty未来展望……………………………………………………………………………….. 505

    23.1. 应用范围………………………………………………………………………………………. 506

    23.2. 技术演进………………………………………………………………………………………. 506

    23.3. 社区活跃度…………………………………………………………………………………… 506

    23.4. Road Map……………………………………………………………………………………… 506

    23.5. 总结…………………………………………………………………………………………….. 507

    附录 A  Netty 参数配置表…………………………………………………………………………….. 508

    原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Netty权威指南》目录

    文章转自 并发编程网-ifeve.com

    相关资源:netty权威指南源码李林峰
    最新回复(0)