注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)行業(yè)軟件及應(yīng)用Netty原理剖析與實(shí)戰(zhàn)

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

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

定 價(jià):¥119.80

作 者: 傅健 著
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115567635 出版時(shí)間: 2021-11-01 包裝: 平裝
開本: 16開 頁數(shù): 398 字?jǐn)?shù):  

內(nèi)容簡介

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

作者簡介

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

圖書目錄

目 錄

第一部分 源碼解析與實(shí)戰(zhàn)入門
第1章 Netty初印象 2
1.1 Netty的定義 2
1.2 Netty并非萬能 3
1.3 Netty程序是什么樣的 4
1.3.1 HTTP服務(wù)器構(gòu)建案例 4
1.3.2 自定義TCP服務(wù)器案例 6
1.4 為什么不直接基于JDK NIO編程 8
1.4.1 Netty做得更多 8
1.4.2 Netty做得更好 9
1.4.3 基于JDK NIO實(shí)現(xiàn)難度太大 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的過去、現(xiàn)狀與發(fā)展趨勢 14
1.6.1 Netty的過去 15
1.6.2 Netty的現(xiàn)狀 16
1.6.3 Netty的發(fā)展趨勢 18
第2章 準(zhǔn)備工作 19
2.1 環(huán)境準(zhǔn)備 19
2.1.1 準(zhǔn)備源碼閱讀環(huán)境 19
2.1.2 準(zhǔn)備實(shí)戰(zhàn)案例環(huán)境 20
2.2 Netty代碼編譯及常見問題 20
2.2.1 常見編譯問題一 20
2.2.2 常見編譯問題二 22
2.3 Netty代碼結(jié)構(gòu)速覽 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 編寫網(wǎng)絡(luò)應(yīng)用程序的基本步驟 29
2.5.1 完成代碼編寫 29
2.5.2 復(fù)查代碼 30
2.5.3 “臨門一腳” 31
2.5.4 上線及反饋 31
2.6 實(shí)戰(zhàn)案例介紹 32
第3章 數(shù)據(jù)編碼 34
3.1 網(wǎng)絡(luò)編程中為什么要進(jìn)行數(shù)據(jù)
編碼 34
3.2 常見的數(shù)據(jù)編碼方式及選擇要點(diǎn) 35
3.2.1 常見的數(shù)據(jù)編碼方式 36
3.2.2 數(shù)據(jù)編碼選擇要點(diǎn) 39
3.3 基于源碼解析Netty對常見數(shù)據(jù)
編解碼的支持 42
3.3.1 解析編解碼支持的原理 42
3.3.2 解析典型Netty數(shù)據(jù)編解碼的
實(shí)現(xiàn) 44
3.4 常見開源軟件對編解碼的使用 47
3.4.1 Cassandra 47
3.4.2 Dubbo 48
3.5 為實(shí)戰(zhàn)案例選擇數(shù)據(jù)編解碼方案 51
3.5.1 定義JSON編解碼方法 51
3.5.2 提供消息的完整編解碼實(shí)現(xiàn) 52
3.5.3 實(shí)現(xiàn)Netty的編解碼處理程序 53
3.6 常見疑問和實(shí)戰(zhàn)易錯點(diǎn)解析 54
3.6.1 常見疑問解析 54
3.6.2 常見實(shí)戰(zhàn)易錯點(diǎn)解析 56
第4章 封幀 58
4.1 網(wǎng)絡(luò)編程為什么需要進(jìn)行消息的
定界 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 追加數(shù)據(jù) 65
4.3.2 嘗試解析出消息對象 65
4.3.3 傳遞解析出的消息對象 66
4.4 常見開源軟件如何封幀 67
4.4.1 Dubbo的幀結(jié)構(gòu) 67
4.4.2 Cassandra的幀結(jié)構(gòu) 67
4.4.3 Hadoop的幀結(jié)構(gòu) 67
4.5 為實(shí)戰(zhàn)案例定義封幀方式 69
4.6 常見疑問和實(shí)戰(zhàn)易錯點(diǎn)解析 70
4.6.1 常見疑問解析 70
4.6.2 常見實(shí)戰(zhàn)易錯點(diǎn)解析 72
第5章 網(wǎng)絡(luò)編程模式 74
5.1 網(wǎng)絡(luò)編程的3種模式 74
5.2 網(wǎng)絡(luò)編程模式的選擇要點(diǎn) 75
5.3 基于源碼解析Netty對網(wǎng)絡(luò)編程
模式的支持 76
5.3.1 Netty對網(wǎng)絡(luò)編程模式的支持
情況 76
5.3.2 Netty對網(wǎng)絡(luò)編程模式的實(shí)現(xiàn)
要點(diǎn) 78
5.4 常見開源軟件是如何支持網(wǎng)絡(luò)
編程模式的 81
5.4.1 Lettuce 81
5.4.2 Cassandra 83
5.5 為實(shí)戰(zhàn)案例選擇網(wǎng)絡(luò)編程模式 84
5.6 常見疑問和實(shí)戰(zhàn)易錯點(diǎn)解析 84
5.6.1 常見疑問解析 84
5.6.2 常見實(shí)戰(zhàn)易錯點(diǎ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在內(nèi)部是如何支持Reactor
模式的 94
6.3 Netty線程模型的可優(yōu)化點(diǎn) 98
6.4 常見開源軟件是如何使用Reactor
模式的 101
6.4.1 Cassandra 101
6.4.2 Dubbo 102
6.4.3 Hadoop 105
6.5 為實(shí)戰(zhàn)案例選擇和實(shí)現(xiàn)線程模型 106
6.5.1 使用Reactor主從多線程模式 106
6.5.2 使用獨(dú)立線程池 106
6.6 常見疑問和實(shí)戰(zhàn)易錯點(diǎn)解析 110
6.6.1 常見疑問解析 110
6.6.2 常見實(shí)戰(zhàn)易錯點(diǎn)解析 114
第二部分 源碼解析與實(shí)戰(zhàn)進(jìn)階
第7章 基于實(shí)戰(zhàn)案例剖析Netty的
核心流程 118
7.1 剖析啟動服務(wù)源碼及技巧 119
7.1.1 主線 119
7.1.2 知識點(diǎn) 122
7.2 剖析構(gòu)建連接源碼及技巧 124
7.2.1 主線 124
7.2.2 知識點(diǎn) 127
7.3 剖析讀取數(shù)據(jù)源碼及技巧 127
7.3.1 主線 128
7.3.2 知識點(diǎn) 130
7.4 剖析處理業(yè)務(wù)源碼及技巧 131
7.4.1 主線 131
7.4.2 知識點(diǎn) 134
7.5 剖析發(fā)送數(shù)據(jù)源碼及技巧 135
7.5.1 主線 135
7.5.2 知識點(diǎn) 141
7.6 剖析關(guān)閉連接源碼及技巧 141
7.6.1 主線 141
7.6.2 知識點(diǎn) 143
7.7 剖析關(guān)閉服務(wù)源碼及技巧 143
7.7.1 主線 144
7.7.2 知識點(diǎn) 148
第8章 參數(shù)調(diào)整 149
8.1 參數(shù)調(diào)整概覽 149
8.1.1 操作系統(tǒng)參數(shù)調(diào)整 149
8.1.2 Netty系統(tǒng)參數(shù)調(diào)整 150
8.1.3 Netty非系統(tǒng)參數(shù)調(diào)整 153
8.2 常見開源軟件對Netty參數(shù)進(jìn)行的
設(shè)置 155
8.3 調(diào)整案例程序的各個(gè)參數(shù) 156
8.4 常見疑問分析 156
8.4.1 使用option()和childOption()
方法設(shè)置參數(shù)的區(qū)別 157
8.4.2 參數(shù)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 實(shí)戰(zhàn)案例 166
9.2 Netty的關(guān)鍵診斷信息及可視化
方案 169
9.2.1 Netty的關(guān)鍵診斷信息 170
9.2.2 診斷信息的可視化方案 171
9.2.3 實(shí)戰(zhàn)案例 173
9.3 Netty內(nèi)存泄漏檢測 176
9.3.1 檢測原理 176
9.3.2 檢測的幾個(gè)關(guān)鍵點(diǎn) 180
9.3.3 實(shí)戰(zhàn)案例 182
9.4 常見疑問和實(shí)戰(zhàn)易錯點(diǎn)解析 183
9.4.1 常見疑問解析 184
9.4.2 常見實(shí)戰(zhàn)易錯點(diǎn)解析 188
第10章 性能優(yōu)化 189
10.1 優(yōu)化寫數(shù)據(jù)的性能 189
10.1.1 源碼解析 190
10.1.2 開源案例 193
10.1.3 實(shí)戰(zhàn)案例 197
10.2 使用Native NIO 198
10.2.1 源碼解析 198
10.2.2 實(shí)戰(zhàn)案例 202
10.3 常見疑問分析 203
10.3.1 Native庫的加載順序 203
10.3.2 check volume for noexec flag的
含義 205
第11章 系統(tǒng)增強(qiáng) 207
11.1 Netty高低水位線保護(hù) 207
11.1.1 源碼解析 207
11.1.2 開源案例 209
11.1.3 實(shí)戰(zhàn)案例 210
11.2 Netty流量控制保護(hù) 211
11.2.1 源碼解析 212
11.2.2 實(shí)戰(zhàn)案例 216
11.3 Netty空閑監(jiān)測防護(hù) 218
11.3.1 源碼解析 220
11.3.2 開源案例 224
11.3.3 實(shí)戰(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 實(shí)戰(zhàn)案例 239
12.1.3 業(yè)界案例 241
12.2 自定義授權(quán) 243
12.2.1 實(shí)戰(zhàn)案例 244
12.2.2 業(yè)界案例 247
12.3 SSL加密 249
12.3.1 理解SSL的本質(zhì) 249
12.3.2 源碼解析 251
12.3.3 實(shí)戰(zhàn)案例 254
12.3.4 業(yè)界案例 256
12.4 常見疑問解析 258
12.4.1 如何設(shè)置IpSubnetFilterRule的
ipAddress 258
12.4.2 如何精確攔截連接地址 259
12.4.3 我們可以在創(chuàng)建連接時(shí)進(jìn)行
連接控制嗎 259
12.4.4 OptionalSslHandler的用途和
實(shí)現(xiàn)方法 260
第13章 可用性提升 262
13.1 使用響應(yīng)分發(fā)進(jìn)行優(yōu)化 262
13.1.1 改進(jìn)需求分析 262
13.1.2 改進(jìn)策略的分析并應(yīng)用 263
13.2 使用代理技術(shù)進(jìn)行優(yōu)化 266
13.2.1 改進(jìn)需求分析 267
13.2.2 改進(jìn)策略的分析及應(yīng)用 269
13.3 使用響應(yīng)式編程進(jìn)行優(yōu)化 271
13.3.1 改進(jìn)需求分析 271
13.3.2 改進(jìn)策略的分析及應(yīng)用 272
第三部分 拓展
第14章 基于Netty構(gòu)建UDP應(yīng)用 276
14.1 解析Netty對UDP編程提供的
支持 276
14.2 服務(wù)器實(shí)現(xiàn) 279
14.2.1 實(shí)現(xiàn)請求解碼器 279
14.2.2 實(shí)現(xiàn)業(yè)務(wù)處理程序 280
14.2.3 實(shí)現(xiàn)響應(yīng)編碼器 281
14.2.4 構(gòu)建UDP服務(wù)器 281
14.3 客戶端實(shí)現(xiàn) 282
14.3.1 基于Netty的NIO客戶端 282
14.3.2 基于Netty的OIO客戶端 285
14.3.3 基于JDK的客戶端 285
14.4 擴(kuò)展知識 286
14.4.1 目標(biāo)地址的兩種常見設(shè)置
方式 286
14.4.2 UDP包的發(fā)送方式 288
14.4.3 UDP廣播及支持 290
14.5 常見易錯點(diǎn) 290
14.5.1 誤用JDK的DatagramPacket 290
14.5.2 誤用ctx.channel().remoteAddress()
作為目標(biāo)地址 292
14.5.3 發(fā)送的數(shù)據(jù)內(nèi)容過多 294
14.5.4 誤解客戶端執(zhí)行綁定操作的
意義 296
第15章 基于Netty構(gòu)建HTTP應(yīng)用 298
15.1 解析Netty是如何支持HTTP
服務(wù)的 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構(gòu)建
HTTP服務(wù) 314
15.2.1 Hadoop如何使用Netty構(gòu)建
Web Hdfs 314
15.2.2 WebFlux如何基于Netty構(gòu)建
Web服務(wù) 319
15.3 將案例程序改造為HTTP
應(yīng)用 324
15.3.1 完成業(yè)務(wù)處理程序 325
15.3.2 組合處理程序以搭建HTTP
服務(wù)器 326
15.4 常見疑問解析 327
15.4.1 HttpServerExpectContinueHandler
和HttpObjectAggregator能否
共存 327
15.4.2 何時(shí)需要寫LastHttpContent 328
15.4.3 HttpChunkedInput必須與
transfer-encoding:chunked
綁定在一起嗎 331
15.4.4 其他流行框架如何根據(jù)請求
定位到處理位置 332
第16章 Netty對文件應(yīng)用的支持 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的
實(shí)現(xiàn) 339
16.3 Netty文件應(yīng)用案例解析 342
第17章 Netty的另類特性 344
17.1 Netty對虛擬機(jī)內(nèi)管道提供的
支持 344
17.1.1 解析JDK自帶的管道技術(shù) 344
17.1.2 如何使用Netty的虛擬機(jī)內(nèi)
管道 347
17.1.3 基于源碼解析Netty的虛擬機(jī)內(nèi)
管道 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 內(nèi)存的使用 380
18.2.1 減小對象本身 380
18.2.2 對分配的內(nèi)存進(jìn)行預(yù)估 381
18.2.3 采用零復(fù)制 382
18.2.4 使用堆外內(nèi)存 384
18.2.5 使用內(nèi)存池 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 衡量好鎖的價(jià)值 388
18.4 開發(fā)流程 389
18.4.1 建立需求 389
18.4.2 編寫代碼 390
18.4.3 平臺校驗(yàn) 391
18.4.4 人工審閱 393
18.4.5 出包管理 393
18.5 代碼規(guī)范 394
18.5.1 遵循代碼風(fēng)格 394
18.5.2 易于使用 395
18.5.3 小步前進(jìn)、逐步修改 395
18.5.4 符合提交規(guī)范 396
附錄A Netty TCP通信支持的實(shí)現(xiàn) 399
附錄B 一些重要術(shù)語的翻譯 400

本目錄推薦

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