注冊 | 登錄讀書好,好讀書,讀好書!
讀書網-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網絡行業(yè)軟件及應用Netty原理剖析與實戰(zhàn)

Netty原理剖析與實戰(zhàn)

Netty原理剖析與實戰(zhàn)

定 價:¥119.80

作 者: 傅健 著
出版社: 人民郵電出版社
叢編項:
標 簽: 暫缺

ISBN: 9787115567635 出版時間: 2021-11-01 包裝: 平裝
開本: 16開 頁數: 398 字數:  

內容簡介

  本書旨在介紹Netty框架的原理和應用。本書首先介紹了什么是Netty,Netty的發(fā)展史,創(chuàng)建Netty應用程序所必備的基礎知識,然后從參數調整、診斷性優(yōu)化、性能優(yōu)化等方面對Netty進行源碼解析并討論如何完善案例程序,最后講述UDP應用、HTTP應用、文件應用和Netty編程思想。本書適合有一定Java基礎的架構師、設計師、開發(fā)工程師、測試工程師,以及對Netty感興趣的相關人士閱讀。

作者簡介

  傅健,認證網絡工程師、信息系統(tǒng)項目管理師,思科(中國)研發(fā)中心軟件工程師。擁有十年以上Java研發(fā)經驗,專注于高性能平臺服務器的開發(fā),是Netty、Spring Data、Influxdb-java、Jenkins等開源項目的貢獻者,著有《微服務之道:度量驅動開發(fā)》。

圖書目錄

目 錄

第一部分 源碼解析與實戰(zhàn)入門
第1章 Netty初印象 2
1.1 Netty的定義 2
1.2 Netty并非萬能 3
1.3 Netty程序是什么樣的 4
1.3.1 HTTP服務器構建案例 4
1.3.2 自定義TCP服務器案例 6
1.4 為什么不直接基于JDK NIO編程 8
1.4.1 Netty做得更多 8
1.4.2 Netty做得更好 9
1.4.3 基于JDK NIO實現難度太大 11
1.5 Netty相比同類框架的優(yōu)勢 13
1.5.1 Apache的Mina 13
1.5.2 Sun的Grizzly 13
1.5.3 Apple的Swift NIO和ACE等 14
1.5.4 Cindy和其他框架 14
1.6 Netty的過去、現狀與發(fā)展趨勢 14
1.6.1 Netty的過去 15
1.6.2 Netty的現狀 16
1.6.3 Netty的發(fā)展趨勢 18
第2章 準備工作 19
2.1 環(huán)境準備 19
2.1.1 準備源碼閱讀環(huán)境 19
2.1.2 準備實戰(zhàn)案例環(huán)境 20
2.2 Netty代碼編譯及常見問題 20
2.2.1 常見編譯問題一 20
2.2.2 常見編譯問題二 22
2.3 Netty代碼結構速覽 24
2.4 本書借鑒的常用開源軟件 26
2.4.1 Cassandra 26
2.4.2 Dubbo 26
2.4.3 Hadoop 27
2.4.4 Lettuce 27
2.4.5 GRPC 28
2.4.6 WebFlux 28
2.5 編寫網絡應用程序的基本步驟 29
2.5.1 完成代碼編寫 29
2.5.2 復查代碼 30
2.5.3 “臨門一腳” 31
2.5.4 上線及反饋 31
2.6 實戰(zhàn)案例介紹 32
第3章 數據編碼 34
3.1 網絡編程中為什么要進行數據
編碼 34
3.2 常見的數據編碼方式及選擇要點 35
3.2.1 常見的數據編碼方式 36
3.2.2 數據編碼選擇要點 39
3.3 基于源碼解析Netty對常見數據
編解碼的支持 42
3.3.1 解析編解碼支持的原理 42
3.3.2 解析典型Netty數據編解碼的
實現 44
3.4 常見開源軟件對編解碼的使用 47
3.4.1 Cassandra 47
3.4.2 Dubbo 48
3.5 為實戰(zhàn)案例選擇數據編解碼方案 51
3.5.1 定義JSON編解碼方法 51
3.5.2 提供消息的完整編解碼實現 52
3.5.3 實現Netty的編解碼處理程序 53
3.6 常見疑問和實戰(zhàn)易錯點解析 54
3.6.1 常見疑問解析 54
3.6.2 常見實戰(zhàn)易錯點解析 56
第4章 封幀 58
4.1 網絡編程為什么需要進行消息的
定界 58
4.1.1 TCP 58
4.1.2 UDP 60
4.2 常見的消息定界方式 61
4.2.1 TCP短連接方式 61
4.2.2 固定長度方式 61
4.2.3 封幀 62
4.2.4 其他方式 63
4.3 通過源碼解析Netty如何支持
封幀 63
4.3.1 追加數據 65
4.3.2 嘗試解析出消息對象 65
4.3.3 傳遞解析出的消息對象 66
4.4 常見開源軟件如何封幀 67
4.4.1 Dubbo的幀結構 67
4.4.2 Cassandra的幀結構 67
4.4.3 Hadoop的幀結構 67
4.5 為實戰(zhàn)案例定義封幀方式 69
4.6 常見疑問和實戰(zhàn)易錯點解析 70
4.6.1 常見疑問解析 70
4.6.2 常見實戰(zhàn)易錯點解析 72
第5章 網絡編程模式 74
5.1 網絡編程的3種模式 74
5.2 網絡編程模式的選擇要點 75
5.3 基于源碼解析Netty對網絡編程
模式的支持 76
5.3.1 Netty對網絡編程模式的支持
情況 76
5.3.2 Netty對網絡編程模式的實現
要點 78
5.4 常見開源軟件是如何支持網絡
編程模式的 81
5.4.1 Lettuce 81
5.4.2 Cassandra 83
5.5 為實戰(zhàn)案例選擇網絡編程模式 84
5.6 常見疑問和實戰(zhàn)易錯點解析 84
5.6.1 常見疑問解析 84
5.6.2 常見實戰(zhàn)易錯點解析 86
第6章 線程模型 89
6.1 NIO的3種Reactor模式 89
6.1.1 Reactor單線程模式 91
6.1.2 Reactor多線程模式 92
6.1.3 Reactor主從多線程模式 92
6.2 源碼解析Netty對3種Reactor
模式的支持 93
6.2.1 如何在Netty中使用這3種
Reactor模式 93
6.2.2 Netty在內部是如何支持Reactor
模式的 94
6.3 Netty線程模型的可優(yōu)化點 98
6.4 常見開源軟件是如何使用Reactor
模式的 101
6.4.1 Cassandra 101
6.4.2 Dubbo 102
6.4.3 Hadoop 105
6.5 為實戰(zhàn)案例選擇和實現線程模型 106
6.5.1 使用Reactor主從多線程模式 106
6.5.2 使用獨立線程池 106
6.6 常見疑問和實戰(zhàn)易錯點解析 110
6.6.1 常見疑問解析 110
6.6.2 常見實戰(zhàn)易錯點解析 114
第二部分 源碼解析與實戰(zhàn)進階
第7章 基于實戰(zhàn)案例剖析Netty的
核心流程 118
7.1 剖析啟動服務源碼及技巧 119
7.1.1 主線 119
7.1.2 知識點 122
7.2 剖析構建連接源碼及技巧 124
7.2.1 主線 124
7.2.2 知識點 127
7.3 剖析讀取數據源碼及技巧 127
7.3.1 主線 128
7.3.2 知識點 130
7.4 剖析處理業(yè)務源碼及技巧 131
7.4.1 主線 131
7.4.2 知識點 134
7.5 剖析發(fā)送數據源碼及技巧 135
7.5.1 主線 135
7.5.2 知識點 141
7.6 剖析關閉連接源碼及技巧 141
7.6.1 主線 141
7.6.2 知識點 143
7.7 剖析關閉服務源碼及技巧 143
7.7.1 主線 144
7.7.2 知識點 148
第8章 參數調整 149
8.1 參數調整概覽 149
8.1.1 操作系統(tǒng)參數調整 149
8.1.2 Netty系統(tǒng)參數調整 150
8.1.3 Netty非系統(tǒng)參數調整 153
8.2 常見開源軟件對Netty參數進行的
設置 155
8.3 調整案例程序的各個參數 156
8.4 常見疑問分析 156
8.4.1 使用option()和childOption()
方法設置參數的區(qū)別 157
8.4.2 參數ALLOW_HALF_CLOSURE
的用途與使用場景 159
第9章 診斷性優(yōu)化 161
9.1 Netty日志優(yōu)化 161
9.1.1 源碼解析 161
9.1.2 開源案例 164
9.1.3 實戰(zhàn)案例 166
9.2 Netty的關鍵診斷信息及可視化
方案 169
9.2.1 Netty的關鍵診斷信息 170
9.2.2 診斷信息的可視化方案 171
9.2.3 實戰(zhàn)案例 173
9.3 Netty內存泄漏檢測 176
9.3.1 檢測原理 176
9.3.2 檢測的幾個關鍵點 180
9.3.3 實戰(zhàn)案例 182
9.4 常見疑問和實戰(zhàn)易錯點解析 183
9.4.1 常見疑問解析 184
9.4.2 常見實戰(zhàn)易錯點解析 188
第10章 性能優(yōu)化 189
10.1 優(yōu)化寫數據的性能 189
10.1.1 源碼解析 190
10.1.2 開源案例 193
10.1.3 實戰(zhàn)案例 197
10.2 使用Native NIO 198
10.2.1 源碼解析 198
10.2.2 實戰(zhàn)案例 202
10.3 常見疑問分析 203
10.3.1 Native庫的加載順序 203
10.3.2 check volume for noexec flag的
含義 205
第11章 系統(tǒng)增強 207
11.1 Netty高低水位線保護 207
11.1.1 源碼解析 207
11.1.2 開源案例 209
11.1.3 實戰(zhàn)案例 210
11.2 Netty流量控制保護 211
11.2.1 源碼解析 212
11.2.2 實戰(zhàn)案例 216
11.3 Netty空閑監(jiān)測防護 218
11.3.1 源碼解析 220
11.3.2 開源案例 224
11.3.3 實戰(zhàn)案例 225
11.4 常見疑問解析 228
11.4.1 HTTP Keep-Alive和keepalive
之間的區(qū)別 228
11.4.2 IdleStateHandler中observeOutput
的功能 228
11.4.3 FileRegion的發(fā)送受高低水位線
控制嗎 230
第12章 安全性提升 233
12.1 黑白名單 233
12.1.1 源碼分析 234
12.1.2 實戰(zhàn)案例 239
12.1.3 業(yè)界案例 241
12.2 自定義授權 243
12.2.1 實戰(zhàn)案例 244
12.2.2 業(yè)界案例 247
12.3 SSL加密 249
12.3.1 理解SSL的本質 249
12.3.2 源碼解析 251
12.3.3 實戰(zhàn)案例 254
12.3.4 業(yè)界案例 256
12.4 常見疑問解析 258
12.4.1 如何設置IpSubnetFilterRule的
ipAddress 258
12.4.2 如何精確攔截連接地址 259
12.4.3 我們可以在創(chuàng)建連接時進行
連接控制嗎 259
12.4.4 OptionalSslHandler的用途和
實現方法 260
第13章 可用性提升 262
13.1 使用響應分發(fā)進行優(yōu)化 262
13.1.1 改進需求分析 262
13.1.2 改進策略的分析并應用 263
13.2 使用代理技術進行優(yōu)化 266
13.2.1 改進需求分析 267
13.2.2 改進策略的分析及應用 269
13.3 使用響應式編程進行優(yōu)化 271
13.3.1 改進需求分析 271
13.3.2 改進策略的分析及應用 272
第三部分 拓展
第14章 基于Netty構建UDP應用 276
14.1 解析Netty對UDP編程提供的
支持 276
14.2 服務器實現 279
14.2.1 實現請求解碼器 279
14.2.2 實現業(yè)務處理程序 280
14.2.3 實現響應編碼器 281
14.2.4 構建UDP服務器 281
14.3 客戶端實現 282
14.3.1 基于Netty的NIO客戶端 282
14.3.2 基于Netty的OIO客戶端 285
14.3.3 基于JDK的客戶端 285
14.4 擴展知識 286
14.4.1 目標地址的兩種常見設置
方式 286
14.4.2 UDP包的發(fā)送方式 288
14.4.3 UDP廣播及支持 290
14.5 常見易錯點 290
14.5.1 誤用JDK的DatagramPacket 290
14.5.2 誤用ctx.channel().remoteAddress()
作為目標地址 292
14.5.3 發(fā)送的數據內容過多 294
14.5.4 誤解客戶端執(zhí)行綁定操作的
意義 296
第15章 基于Netty構建HTTP應用 298
15.1 解析Netty是如何支持HTTP
服務的 298
15.1.1 編解碼器HttpServerCodec 299
15.1.2 ExpectContinue處理程序HttpServer-
ExpectContinueHandler 302
15.1.3 請求合并器
HttpObjectAggregator 305
15.1.4 其他常用的HTTP處理程序 313
15.2 開源軟件如何使用Netty構建
HTTP服務 314
15.2.1 Hadoop如何使用Netty構建
Web Hdfs 314
15.2.2 WebFlux如何基于Netty構建
Web服務 319
15.3 將案例程序改造為HTTP
應用 324
15.3.1 完成業(yè)務處理程序 325
15.3.2 組合處理程序以搭建HTTP
服務器 326
15.4 常見疑問解析 327
15.4.1 HttpServerExpectContinueHandler
和HttpObjectAggregator能否
共存 327
15.4.2 何時需要寫LastHttpContent 328
15.4.3 HttpChunkedInput必須與
transfer-encoding:chunked
綁定在一起嗎 331
15.4.4 其他流行框架如何根據請求
定位到處理位置 332
第16章 Netty對文件應用的支持 334
16.1 FileRegion 334
16.1.1 Netty如何支持FileRegion 335
16.1.2 解析FileRegion的劣勢 337
16.2 ChunkedFile/ChunkedNioFile 338
16.2.1 比較ChunkedFile與
ChunkedNioFile 338
16.2.2 解析ChunkedWriteHandler的
實現 339
16.3 Netty文件應用案例解析 342
第17章 Netty的另類特性 344
17.1 Netty對虛擬機內管道提供的
支持 344
17.1.1 解析JDK自帶的管道技術 344
17.1.2 如何使用Netty的虛擬機內
管道 347
17.1.3 基于源碼解析Netty的虛擬機內
管道 349
17.2 Netty對UNIX域套接字提供的
支持 353
17.2.1 如何使用Netty的域套接字 353
17.2.2 基于源碼解析Netty的域
套接字 355
17.3 Netty對JDK的ThreadLocal所做的
優(yōu)化 359
17.3.1 在Netty中如何使用
FastThreadLocal 359
17.3.2 基于源碼解析ThreadLocal的
性能缺陷 360
17.3.3 基于源碼解析FastThreadLocal
所做的優(yōu)化 362
17.4 Netty對JDK的Timer所做的
優(yōu)化 365
17.4.1 在Netty中如何使用
HashedWheelTimer 365
17.4.2 基于源碼解析Timer的性能
缺陷 366
17.4.3 基于源碼解析HashedWheelTimer
所做的優(yōu)化 368
第18章 Netty編程思想 372
18.1 注解的使用 372
18.1.1 @UnstableApi 373
18.1.2 @Skip 373
18.1.3 @Sharable 374
18.1.4 @SuppressJava6Requirement 375
18.1.5 @SuppressForbidden 377
18.2 內存的使用 380
18.2.1 減小對象本身 380
18.2.2 對分配的內存進行預估 381
18.2.3 采用零復制 382
18.2.4 使用堆外內存 384
18.2.5 使用內存池 385
18.3 多線程并發(fā) 386
18.3.1 注意鎖的對象和范圍 386
18.3.2 注意鎖的對象本身的大小 386
18.3.3 注意鎖的速度 387
18.3.4 為不同場景選擇不同的
并發(fā)類 387
18.3.5 衡量好鎖的價值 388
18.4 開發(fā)流程 389
18.4.1 建立需求 389
18.4.2 編寫代碼 390
18.4.3 平臺校驗 391
18.4.4 人工審閱 393
18.4.5 出包管理 393
18.5 代碼規(guī)范 394
18.5.1 遵循代碼風格 394
18.5.2 易于使用 395
18.5.3 小步前進、逐步修改 395
18.5.4 符合提交規(guī)范 396
附錄A Netty TCP通信支持的實現 399
附錄B 一些重要術語的翻譯 400

本目錄推薦

掃描二維碼
Copyright ? 讀書網 ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號