柳伟卫,网名老卫、waylau,在 IT 公司担任项目经理、架构师、高级技术顾问等职位,是 CSDN、 开源中国、云栖社区等技术社区专家,慕课网特邀讲师。具有多年软件开发管理及系统架构经验。负责过多个省、国家大型分布式系统的设计与研发,参与了多个大型项目的微服务架构的技术改造,在实际工作中,积累了大量的微服务架构以及性能调优经验。业余时间创建了 waylau.com 网站,用于分享个人技术心得。喜欢开源,长期跃于各大开源社区,编著了《Netty 4.x 用户指南》《Netty 实战(精髓)》等近30余本技术教程,广受网友好评。已出版《分布式系统常用技术及案例分析》《Spring Boot 企业级应用开发实战》《Spring Cloud 微服务架构开发实战》等专著。
第1章 Netty 概述........... 1
1.1 Java 网络编程进化史 ...............2
1.2 Netty 的优势............ 18
1.3 Netty 核心概念.......... 22
1.4 Netty 开发环境的搭建................... 24
1.5 实战:快速开启第一个 Netty 应用...................... 30
第2章 Netty 架构设计 ...........39
2.1 理解 Selector 模型.................. 40
2.2 事件驱动.......................... 44
2.3 责任链模式...................... 47
第3章 Channel ...........51
3.1 Channel 详解 ................... 52
3.2 ChannelHandler 接口 ................ 59
3.3 ChannelInboundHandler 接口 ....................... 61
3.4 ChannelOutboundHandler 接口........................ 63
3.5 ChannelHandlerAdapter 抽象类..................... 64
3.6 适配器的作用................... 68
3.7 ChannelPipeline 接口 ................ 69
3.8 ChannelPipeline 中的 ChannelHandler .................... 78
3.9 ChannelHandlerContext 接口........................ 79
3.10 Channel 异常处理 .............. 82
3.11 NIO 传输....................... 87
3.12 OIO 传输 ........................ 93
3.13 epoll 传输 .................... 98
3.14 本地传输 ......................... 103
3.15 内嵌传输 ..................... 106
第4章 字节缓冲区 ..............107
4.1 ByteBuf 类 ....................... 108
4.2 ByteBufAllocator 接口 .............. 123
4.3 ByteBufUtil 类.................. 125
4.4 ByteBufHolder 接口.................. 130
4.5 CompositeByteBuf 类 .............. 134
4.6 ReferenceCounted 接口 ........... 137
4.7 Unpooled 类 .................. 139
4.8 零拷贝 ........................... 151
4.9 动态扩容......................... 159
第5章 引导程序 ..............161
5.1 引导程序类.................. 162
5.2 实战:引导服务器 ....................... 173
5.3 实战:引导客户端 ....................... 176
5.4 实战:引导无连接协议........................ 178
第6章 线程模型........ 195
6.1 Java 线程模型的不足 .................. 196
6.2 线程模型的类型 ..................... 201
6.3 EventLoop 接口........................ 219
6.4 EventLoopGroup 接口 .............. 221
6.5 任务调度................. 224
6.6 Future ........................ 227
6.7 Promise ................... 232
第7章 编解码 ........248
7.1 编解码概述................... 249
7.2 解码器 ................ 250
7.3 实战:自定义基于换行的解码器 ...... 258
7.4 编码器 ................... 267
7.5 实战:自定义编码器..................... 273
7.6 编解码器................................... 283
7.7 实战:自定义编解码器.................. 291
7.8 序列化数据................. 295
7.9 实战:基于 Netty 的对象序列化...... 298
7.10 实战:基于 Jackson 的 JSON 序列化 .......... 304
第8章 ChannelHandler ........314
8.1 ChannelHandler 概述 ............... 315
8.2 消息流程控制............................. 317
8.3 flush 行为控制................. 325
8.4 I/O 事件记录................... 332
8.5 IP 地址过滤................ 337
8.6 超时处理....................... 340
8.7 大数据流处理...................... 351
8.8 数据加密....................... 359
8.9 流量整形....................... 375
第9章 常用网络协议 ........389
9.1 了解 HTTP.......................... 390
9.2 Netty 对于 HTTP 的支持 ............. 396
9.3 实战:基于 HTTP 的 Web 服务器 ........................... 404
9.4 了解 HTTP/2....................... 408
9.5 Netty 对于 HTTP/2 的支持........... 415
9.6 实战:基于 HTTP/2 的 Web 服务器和客户端...................... 428
9.7 了解 WebSocket ...................... 448
9.8 Netty 对于 WebSocket 的支持................................. 457
9.9 实战:基于 WebSocket 的聊天室............................. 461
第10章 测试 ........472
10.1 EmbeddedChannel 类............. 473
10.2 实战:EmbeddedChannel 测试入站信息 ................ 474
10.3 实战:EmbeddedChannel 测试出站信息 .................. 477
10.4 使用 Apache JMeter 进行性能测试 .......................... 479
10.4.5 添加测试报告................ 482
10.4.6 执行测试...................... 483
第 11 章 案例分析 ........484
11.1 高性能消息中间件——Apache RocketMQ..................... 485
11.2 异步编程框架——Eclipse Vert.x ............................... 499
11.3 高性能 PRC 框架——Apache Dubbo..................... 510
11.3.1 入门示例 Provider ............................... 511
第 12 章 实战:实现监控系统整体设计 ........523
12.1 监控系统概述........................ 524
12.2 架构设计 ........................ 524
12.3 通信协议设计........................ 531
12.4 数据库设计..................... 535
第 13 章 实战:实现监控系统数据采集 ........539
13.1 基于 OSHI 数据采集功能实现 ....... 540
13.2 实现数据采集客户端 ................... 543
13.3 实现数据采集服务器 ................... 546
13.4 运行测试 ....................... 549
13.5 程序改进:指定启动参数.............. 551
13.6 程序改进:使用 fat jar 启动应用............................. 554
第 14 章 实战:实现监控系统数据存储 ........557
14.1 基于 DBCP 的连接池实现............ 558
14.2 使用 DbUtils 简化数据库操作 ....... 564
14.3 实现数据存储功能 .............. 569
第 15 章 实战:实现监控系统数据展示 ........571
15.1 基于 Lite 的 Web 服务器............. 572
15.2 创建基于 Lite 的 Web 服务器 ....... 574
15.3 提供采集数据 REST API ............ 576
15.4 使用 Angular 创建客户端............ 582
15.5 使用 HTTP 客户端访问 REST API .................. 596
第 16 章 实战:实现监控系统高可用部署 ........605
16.1 NGINX 概述.................. 606
16.2 部署 Angular 应用 .................... 610
16.3 实现负载均衡及高可用................. 613
附录 ...........617
参考文献 ........618