柳偉衛(wèi),網(wǎng)名老衛(wèi)、waylau,在 IT 公司擔(dān)任項目經(jīng)理、架構(gòu)師、高級技術(shù)顧問等職位,是 CSDN、 開源中國、云棲社區(qū)等技術(shù)社區(qū)專家,慕課網(wǎng)特邀講師。具有多年軟件開發(fā)管理及系統(tǒng)架構(gòu)經(jīng)驗。負責(zé)過多個省、國家大型分布式系統(tǒng)的設(shè)計與研發(fā),參與了多個大型項目的微服務(wù)架構(gòu)的技術(shù)改造,在實際工作中,積累了大量的微服務(wù)架構(gòu)以及性能調(diào)優(yōu)經(jīng)驗。業(yè)余時間創(chuàng)建了 waylau.com 網(wǎng)站,用于分享個人技術(shù)心得。喜歡開源,長期躍于各大開源社區(qū),編著了《Netty 4.x 用戶指南》《Netty 實戰(zhàn)(精髓)》等近30余本技術(shù)教程,廣受網(wǎng)友好評。已出版《分布式系統(tǒng)常用技術(shù)及案例分析》《Spring Boot 企業(yè)級應(yīng)用開發(fā)實戰(zhàn)》《Spring Cloud 微服務(wù)架構(gòu)開發(fā)實戰(zhàn)》等專著。
第1章 Netty 概述........... 1
1.1 Java 網(wǎng)絡(luò)編程進化史 ...............2
1.2 Netty 的優(yōu)勢............ 18
1.3 Netty 核心概念.......... 22
1.4 Netty 開發(fā)環(huán)境的搭建................... 24
1.5 實戰(zhàn):快速開啟第一個 Netty 應(yīng)用...................... 30
第2章 Netty 架構(gòu)設(shè)計 ...........39
2.1 理解 Selector 模型.................. 40
2.2 事件驅(qū)動.......................... 44
2.3 責(zé)任鏈模式...................... 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 內(nèi)嵌傳輸 ..................... 106
第4章 字節(jié)緩沖區(qū) ..............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 動態(tài)擴容......................... 159
第5章 引導(dǎo)程序 ..............161
5.1 引導(dǎo)程序類.................. 162
5.2 實戰(zhàn):引導(dǎo)服務(wù)器 ....................... 173
5.3 實戰(zhàn):引導(dǎo)客戶端 ....................... 176
5.4 實戰(zhàn):引導(dǎo)無連接協(xié)議........................ 178
第6章 線程模型........ 195
6.1 Java 線程模型的不足 .................. 196
6.2 線程模型的類型 ..................... 201
6.3 EventLoop 接口........................ 219
6.4 EventLoopGroup 接口 .............. 221
6.5 任務(wù)調(diào)度................. 224
6.6 Future ........................ 227
6.7 Promise ................... 232
第7章 編解碼 ........248
7.1 編解碼概述................... 249
7.2 解碼器 ................ 250
7.3 實戰(zhàn):自定義基于換行的解碼器 ...... 258
7.4 編碼器 ................... 267
7.5 實戰(zhàn):自定義編碼器..................... 273
7.6 編解碼器................................... 283
7.7 實戰(zhàn):自定義編解碼器.................. 291
7.8 序列化數(shù)據(jù)................. 295
7.9 實戰(zhàn):基于 Netty 的對象序列化...... 298
7.10 實戰(zhàn):基于 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 大數(shù)據(jù)流處理...................... 351
8.8 數(shù)據(jù)加密....................... 359
8.9 流量整形....................... 375
第9章 常用網(wǎng)絡(luò)協(xié)議 ........389
9.1 了解 HTTP.......................... 390
9.2 Netty 對于 HTTP 的支持 ............. 396
9.3 實戰(zhàn):基于 HTTP 的 Web 服務(wù)器 ........................... 404
9.4 了解 HTTP/2....................... 408
9.5 Netty 對于 HTTP/2 的支持........... 415
9.6 實戰(zhàn):基于 HTTP/2 的 Web 服務(wù)器和客戶端...................... 428
9.7 了解 WebSocket ...................... 448
9.8 Netty 對于 WebSocket 的支持................................. 457
9.9 實戰(zhàn):基于 WebSocket 的聊天室............................. 461
第10章 測試 ........472
10.1 EmbeddedChannel 類............. 473
10.2 實戰(zhàn):EmbeddedChannel 測試入站信息 ................ 474
10.3 實戰(zhàn):EmbeddedChannel 測試出站信息 .................. 477
10.4 使用 Apache JMeter 進行性能測試 .......................... 479
10.4.5 添加測試報告................ 482
10.4.6 執(zhí)行測試...................... 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 章 實戰(zhàn):實現(xiàn)監(jiān)控系統(tǒng)整體設(shè)計 ........523
12.1 監(jiān)控系統(tǒng)概述........................ 524
12.2 架構(gòu)設(shè)計 ........................ 524
12.3 通信協(xié)議設(shè)計........................ 531
12.4 數(shù)據(jù)庫設(shè)計..................... 535
第 13 章 實戰(zhàn):實現(xiàn)監(jiān)控系統(tǒng)數(shù)據(jù)采集 ........539
13.1 基于 OSHI 數(shù)據(jù)采集功能實現(xiàn) ....... 540
13.2 實現(xiàn)數(shù)據(jù)采集客戶端 ................... 543
13.3 實現(xiàn)數(shù)據(jù)采集服務(wù)器 ................... 546
13.4 運行測試 ....................... 549
13.5 程序改進:指定啟動參數(shù).............. 551
13.6 程序改進:使用 fat jar 啟動應(yīng)用............................. 554
第 14 章 實戰(zhàn):實現(xiàn)監(jiān)控系統(tǒng)數(shù)據(jù)存儲 ........557
14.1 基于 DBCP 的連接池實現(xiàn)............ 558
14.2 使用 DbUtils 簡化數(shù)據(jù)庫操作 ....... 564
14.3 實現(xiàn)數(shù)據(jù)存儲功能 .............. 569
第 15 章 實戰(zhàn):實現(xiàn)監(jiān)控系統(tǒng)數(shù)據(jù)展示 ........571
15.1 基于 Lite 的 Web 服務(wù)器............. 572
15.2 創(chuàng)建基于 Lite 的 Web 服務(wù)器 ....... 574
15.3 提供采集數(shù)據(jù) REST API ............ 576
15.4 使用 Angular 創(chuàng)建客戶端............ 582
15.5 使用 HTTP 客戶端訪問 REST API .................. 596
第 16 章 實戰(zhàn):實現(xiàn)監(jiān)控系統(tǒng)高可用部署 ........605
16.1 NGINX 概述.................. 606
16.2 部署 Angular 應(yīng)用 .................... 610
16.3 實現(xiàn)負載均衡及高可用................. 613
附錄 ...........617
參考文獻 ........618