《Netty權威指南(第2版)》是2015年4月電子工業出版社出版的圖書,作者是李林鋒。
基本介紹
- 書名:Netty權威指南(第2版)
- 作者:李林鋒
- ISBN:978-7-121-25801-5
- 頁數:572
- 定價:89.00元
- 出版社:電子工業出版社
- 出版時間:2015年4月
- 裝幀:平裝
- 開本:16
內容簡介,內容提要,作者簡介,目錄,
內容簡介
《Netty權威指南(第2 版)》是異步非阻塞通信領域的經典之作,基於最新版本的Netty 5.0 編寫,是國內首本深入介紹Netty 原理和架構的書籍,也是作者多年實戰經驗的總結和濃縮。內容不僅包含Java NIO入門知識、Netty 的基礎功能開發指導、編解碼框架定製等,還包括私有協定棧定製和開發、Netty 核心類庫源碼分析,以及Netty 的架構剖析。
《Netty 權威指南(第2 版)》適合架構師、設計師、軟體開發工程師、測試人員以及其他對JavaNIO 框架、Netty 感興趣的相關人士閱讀,通過《Netty 權威指南(第2 版)》的學習,讀者不僅能夠掌握Netty 基礎功能的使用和開發,更能夠掌握Netty 核心類庫的原理和使用約束,從而在實際工作中更好地使用Netty。
內容提要
《Netty 權威指南(第2 版)》是異步非阻塞通信領域的經典之作,基於最新版本的Netty 5.0 編寫,是國內首本深入介紹Netty 原理和架構的書籍,也是作者多年實戰經驗的總結和濃縮。內容不僅包含Java NIO入門知識、Netty 的基礎功能開發指導、編解碼框架定製等,還包括私有協定棧定製和開發、Netty 核心類庫源碼分析,以及Netty 的架構剖析。
《Netty 權威指南(第2 版)》適合架構師、設計師、軟體開發工程師、測試人員以及其他對Java NIO 框架、Netty 感興趣的相關人士閱讀,通過《Netty 權威指南(第2 版)》的學習,讀者不僅能夠掌握Netty 基礎功能的使用和開發,更能夠掌握Netty 核心類庫的原理和使用約束,從而在實際工作中更好地使用Netty。
作者簡介
李林鋒:Netty中國推廣者,現華為技術有限公司平台中間件架構與設計部設計師,公司總裁技術創新獎獲得者。長期從事高性能通信軟體的架構設計和開發工作,有多年在NIO領域的設計、開發和運維經驗,精通NIO編程和Netty、Mina等主流NIO框架。
目錄
基礎篇走進Java NIO
第1 章Java 的I/O 演進之路.2
1.1 I/O 基礎入門...............3
1.1.1 Linux 網路I/O 模型簡介.......3
1.1.2 I/O 多路復用技術.................6
1.2 Java 的I/O 演進..........8
1.3 總結............................ 10
第2 章NIO 入門.................... 11
2.1 傳統的BIO 編程....... 11
2.1.1 BIO 通信模型圖.................. 12
2.1.2 同步阻塞式I/O 創建的TimeServer 源碼分析............. 13
2.1.3 同步阻塞式I/O 創建的TimeClient 源碼分析.......... 16
2.2 偽異步I/O 編程........ 18
2.2.1 偽異步I/O 模型圖.............. 19
2.2.2 偽異步I/O 創建的TimeServer 源碼分析..... 19
2.2.3 偽異步I/O 弊端分析........... 21
2.3 NIO 編程.................... 24
2.3.1 NIO 類庫簡介.. 24
2.3.2 NIO 服務端序列圖.............. 28
2.3.3 NIO 創建的TimeServer 源碼分析................ 30
2.3.4 NIO 客戶端序列圖.............. 36
2.3.5 NIO 創建的TimeClient 源碼分析................ 39
2.4 AIO 編程.................... 45
2.4.1 AIO 創建的TimeServer 源碼分析................ 46
2.4.2 AIO 創建的TimeClient 源碼分析................ 51
2.4.3 AIO 版本時間伺服器運行結果.................... 56
2.5 4 種I/O 的對比......... 58
2.5.1 概念澄清.......... 58
2.5.2 不同I/O 模型對比.............. 59
2.6 選擇Netty 的理由..... 60
2.6.1 不選擇Java 原生NIO 編程的原因............... 61
2.6.2 為什麼選擇Netty ................ 62
2.7 總結............................ 63
入門篇 Netty NIO 開發指南
第3 章Netty 入門套用.......... 66
3.1 Netty 開發環境的搭建................ 66
3.1.1 下載Netty 的軟體包........... 67
3.1.2 搭建Netty 套用工程........... 67
3.2 Netty 服務端開發...... 68
3.3 Netty 客戶端開發...... 73
3.4 運行和調試................ 76
3.4.1 服務端和客戶端的運行...... 76
3.4.2 打包和部署...... 77
3.5 總結............................ 77
第4 章TCP 粘包/拆包問題的解決之道...... 79
4.1 TCP 粘包/拆包.......... 79
4.1.1 TCP 粘包/拆包問題說明..... 80
4.1.2 TCP 粘包/拆包發生的原因....... 80
4.1.3 粘包問題的解決策略.......... 81
4.2 未考慮TCP 粘包導致功能異常案例................. 82
4.2.1 TimeServer 的改造.............. 82
4.2.2 TimeClient 的改造............... 83
4.2.3 運行結果.......... 84
4.3 利用LineBasedFrameDecoder 解決TCP 粘包問題................ 85
4.3.1 支持TCP 粘包的TimeServer ....................... 86
4.3.2 支持TCP 粘包的TimeClient........................ 88
4.3.3 運行支持TCP 粘包的時間伺服器程式........ 90
4.3.4 LineBasedFrameDecoder 和StringDecoder 的原理分析........... 91
4.4 總結............................ 92
第5 章分隔設定和定長解碼器的套用...... 93
5.1 DelimiterBasedFrameDecoder 套用開發............. 94
5.1.1 DelimiterBasedFrameDecoder 服務端開發.... 94
5.1.2 DelimiterBasedFrameDecoder 客戶端開發.... 97
5.1.3 運行DelimiterBasedFrameDecoder 服務端和客戶端............... 99
5.2 FixedLengthFrameDecoder 套用開發............... 101
5.2.1 FixedLengthFrameDecoder 服務端開發...... 101
5.2.2 利用telnet 命令行測試EchoServer 服務端......103
5.3 總結.......................... 104
中級篇 Netty 編解碼開發指南
第6 章編解碼技術.............. 106
6.1 Java 序列化的缺點 ...... 107
6.1.1 無法跨語言.... 107
6.1.2 序列化後的碼流太大........ 107
6.1.3 序列化性能太低................ 110
6.2 業界主流的編解碼框架............ 113
6.2.1 Google 的Protobuf 介紹.... 113
6.2.2 Facebook 的Thrift 介紹.... 115
6.2.3 JBoss Marshalling 介紹..... 116
6.3 總結.......................... 117
第7 章MessagePack 編解碼............... 118
7.1 MessagePack 介紹... 118
7.1.1 MessagePack 多語言支持.. 119
7.1.2 MessagePack Java API 介紹........................ 119
7.1.3 MessagePack 開發包下載. 120
7.2 MessagePack 編碼器和解碼器開發................. 120
7.2.1 MessagePack 編碼器開發....... 120
7.2.2 MessagePack 解碼器開發 ...... 121
7.2.3 功能測試........ 121
7.3 粘包/半包支持......... 124
7.4 總結.......................... 127
第8 章Google Protobuf 編解碼.......... 128
8.1 Protobuf 的入門....... 129
8.1.1 Protobuf 開發環境搭建..... 129
8.1.2 Protobuf 編解碼開發......... 131
8.1.3 運行Protobuf 例程............ 133
8.2 Netty 的Protobuf 服務端開發.. 133
8.2.1 Protobuf 版本的圖書訂購服務端開發........ 134
8.2.2 Protobuf 版本的圖書訂購客戶端開發........ 136
8.2.3 Protobuf 版本的圖書訂購程式功能測試.... 139
8.3 Protobuf 的使用注意事項......... 140
8.4 總結.......................... 142
第9 章JBoss Marshalling 編解碼....... 143
9.1 Marshalling 開發環境準備........ 143
9.2 Netty 的Marshalling 服務端開發..................... 144
9.3 Netty 的Marshalling 客戶端開發..................... 147
9.4 運行Marshalling 客戶端和服務端例程........... 149
9.5 總結.......................... 150
高級篇 Netty 多協定開發和套用
第10 章HTTP 協定開發套用............... 154
10.1 HTTP 協定介紹..... 155
10.1.1 HTTP 協定的URL .......... 155
10.1.2 HTTP 請求訊息(HttpRequest).............. 155
10.1.3 HTTP 回響訊息(HttpResponse)........... 158
10.2 Netty HTTP 服務端入門開發....... 159
10.2.1 HTTP 服務端例程場景描述..................... 160
10.2.2 HTTP 服務端開發........... 160
10.2.3 Netty HTTP 檔案伺服器例程運行結果.... 166
10.3 Netty HTTP+XML 協定棧開發....................... 170
10.3.1 開發場景介紹................. 171
10.3.2 HTTP+XML 協定棧設計.......174
10.3.3 高效的XML 綁定框架JiBx ..................... 175
10.3.4 HTTP+XML 編解碼框架開發.................. 183
10.3.5 HTTP+XML 協定棧測試....... 199
10.3.6 小結............. 201
10.4 總結........................ 202
第11 章WebSocket 協定開發............. 203
11.1 HTTP 協定的弊端....... 204
11.2 WebSocket 入門..... 204
11.2.1 WebSocket 背景............... 205
11.2.2 WebSocket 連線建立....... 206
11.2.3 WebSocket 生命周期....... 207
11.2.4 WebSocket 連線關閉....... 208
11.3 Netty WebSocket 協定開發..... 209
11.3.1 WebSocket 服務端功能介紹..................... 209
11.3.2 WebSocket 服務端開發.... 210
11.3.3 運行WebSocket 服務端... 218
11.4 總結........................ 219
第12 章私有協定棧開發.... 221
12.1 私有協定介紹........ 221
12.2 Netty 協定棧功能設計............ 223
12.2.1 網路拓撲圖.. 223
12.2.2 協定棧功能描述.............. 224
12.2.3 通信模型...... 224
12.2.4 訊息定義...... 225
12.2.5 Netty 協定支持的欄位類型...................... 226
12.2.6 Netty 協定的編解碼規範. 227
12.2.7 鏈路的建立.. 229
12.2.8 鏈路的關閉.. 230
12.2.9 可靠性設計.. 230
12.2.10 安全性設計 232
12.2.11 可擴展性設計................ 232
12.3 Netty 協定棧開發.. 233
12.3.1 數據結構定義................. 233
12.3.2 訊息編解碼.. 237
12.3.3 握手和安全認證.............. 241
12.3.4 心跳檢測機制................. 245
12.3.5 斷連重連...... 248
12.3.6 客戶端代碼.. 249
12.3.7 服務端代碼.. 251
12.4 運行協定棧............ 252
12.4.1 正常場景...... 252
12.4.2 異常場景:服務端宕機重啟.................... 253
12.4.3 異常場景:客戶端宕機重啟.................... 256
12.5 總結........................ 256
第13 章服務端創建............ 258
13.1 原生NIO 類庫的複雜性......... 259
13.2 Netty 服務端創建源碼分析.... 259
13.2.1 Netty 服務端創建時序圖. 260
13.2.2 Netty 服務端創建源碼分析...................... 263
13.3 客戶端接入源碼分析.............. 272
13.4 總結........................ 275
第14 章客戶端創建............ 276
14.1 Netty 客戶端創建流程分析.... 276
14.2.1 Netty 客戶端創建時序圖. 276
14.2.2 Netty 客戶端創建流程分析...................... 277
14.2 Netty 客戶端創建源碼分析.... 278
14.2.1 客戶端連線輔助類Bootstrap.................... 278
14.2.2 客戶端連線操作.............. 281
14.2.3 異步連線結果通知.......... 283
14.2.4 客戶端連線逾時機制...... 284
14.3 總結........................ 286
源碼分析篇 Netty 功能介紹和源碼分析
第15 章ByteBuf 和相關輔助類........... 288
15.1 ByteBuf 功能說明. 288
15.1.1 ByteBuf 的工作原理........ 289
15.1.2 ByteBuf 的功能介紹........ 294
15.2 ByteBuf 源碼分析. 308
15.2.1 ByteBuf 的主要類繼承關係..................... 309
15.2.2 AbstractByteBuf 源碼分析........................ 310
15.2.3 AbstractReferenceCountedByteBuf 源碼分析.................. 319
15.2.4 UnpooledHeapByteBuf 源碼分析.............. 321
15.2.5 PooledByteBuf 記憶體池原理分析............... 326
15.2.6 PooledDirectByteBuf 源碼分析................. 329
15.3 ByteBuf 相關的輔助類功能介紹.................... 332
15.3.1 ByteBufHolder................. 332
15.3.2 ByteBufAllocator ............. 333
15.3.3 CompositeByteBuf ........... 334
15.3.4 ByteBufUtil .. 336
15.4 總結........................ 337
第16 章Channel 和Unsafe ................. 338
16.1 Channel 功能說明. 338
16.1.1 Channel 的工作原理........ 339
16.1.2 Channel 的功能介紹........ 340
16.2 Channel 源碼分析. 343
16.2.1 Channel 的主要繼承關係類圖.................. 343
16.2.2 AbstractChannel 源碼分析........................ 344
16.2.3 AbstractNioChannel 源碼分析.................. 347
16.2.4 AbstractNioByteChannel 源碼分析........... 350
16.2.5 AbstractNioMessageChannel 源碼分析..... 353
16.2.6 AbstractNioMessageServerChannel 源碼分析.............. 354
16.2.7 NioServerSocketChannel 源碼分析........... 355
16.2.8 NioSocketChannel 源碼分析..................... 358
16.3 Unsafe 功能說明... 364
16.4 Unsafe 源碼分析... 365
16.4.1 Unsafe 繼承關係類圖...... 365
16.4.2 AbstractUnsafe 源碼分析. 366
16.4.3 AbstractNioUnsafe 源碼分析.................... 375
16.4.4 NioByteUnsafe 源碼分析. 379
16.5 總結........................ 387
第17 章ChannelPipeline 和ChannelHandler........... 388
17.1 ChannelPipeline 功能說明....... 389
17.1.1 ChannelPipeline 的事件處理.................... 389
17.1.2 自定義攔截器................. 391
17.1.3 構建pipeline 392
17.1.4 ChannelPipeline 的主要特性.................... 393
17.2 ChannelPipeline 源碼分析....... 393
17.2.1 ChannelPipeline 的類繼承關係圖............. 393
17.2.2 ChannelPipeline 對ChannelHandler 的管理........... 393
17.2.3 ChannelPipeline 的inbound 事件.............. 396
17.2.4 ChannelPipeline 的outbound 事件............ 397
17.3 ChannelHandler 功能說明....... 398
17.3.1 ChannelHandlerAdapter 功能說明............ 399
17.3.2 ByteToMessageDecoder 功能說明............ 399
17.3.3 MessageToMessageDecoder 功能說明...... 400
17.3.4 LengthFieldBasedFrameDecoder 功能說明............... 400
17.3.5 MessageToByteEncoder 功能說明............. 404
17.3.6 MessageToMessageEncoder 功能說明....... 404
17.3.7 LengthFieldPrepender 功能說明............... 405
17.4 ChannelHandler 源碼分析....... 406
17.4.1 ChannelHandler 的類繼承關係圖............. 406
17.4.2 ByteToMessageDecoder 源碼分析............ 407
17.4.3 MessageToMessageDecoder 源碼分析...... 410
17.4.4 LengthFieldBasedFrameDecoder 源碼分析............ 411
17.4.5 MessageToByteEncoder 源碼分析............. 415
17.4.6 MessageToMessageEncoder 源碼分析....... 416
17.4.7 LengthFieldPrepender 源碼分析............... 417
17.5 總結........................ 418
第18 章EventLoop 和EventLoopGroup.................... 419
18.1 Netty 的執行緒模型.. 419
18.1.1 Reactor 單執行緒模型......... 420
18.1.2 Reactor 多執行緒模型......... 421
18.1.3 主從Reactor 多執行緒模型 422
18.1.4 Netty 的執行緒模型............ 423
18.1.5 最佳實踐...... 424
18.2 NioEventLoop 源碼分析......... 425
18.2.1 NioEventLoop 設計原理.. 425
18.2.2 NioEventLoop 繼承關係類圖................... 426
18.2.3 NioEventLoop.................. 427
18.3 總結........................ 436
第19 章Future 和Promise .................. 438
19.1 Future 功能............ 438
19.2 ChannelFuture 源碼分析......... 443
19.3 Promise 功能介紹. 445
19.4 Promise 源碼分析. 447
19.4.1 Promise 繼承關係圖........ 447
19.4.2 DefaultPromise ................ 447
19.5 總結........................ 449
架構和行業套用篇 Netty 高級特性
第20 章Netty 架構剖析..... 452
20.1 Netty 邏輯架構...... 452
20.1.1 Reactor 通信調度層......... 453
20.1.2 職責鏈ChannelPipeline ... 453
20.1.3 業務邏輯編排層(Service ChannelHandler)........... 454
20.2 關鍵架構質量屬性.................. 454
20.2.1 高性能.......... 454
20.2.2 可靠性.......... 457
20.2.3 可定製性...... 460
20.2.4 可擴展性...... 460
20.3 總結........................ 460
第21 章Java 多執行緒編程在Netty 中的套用............. 461
21.1 Java 記憶體模型與多執行緒編程.. 461
21.1.1 硬體的發展和多任務處理........................ 461
21.1.2 Java 記憶體模型................. 462
21.2 Netty 的並發編程實踐............ 464
21.2.1 對共享的可變數據進行正確的同步......... 464
21.2.2 正確使用鎖.. 465
21.2.3 volatile 的正確使用......... 467
21.2.4 CAS 指令和原子類......... 470
21.2.5 執行緒安全類的套用.......... 472
21.2.6 讀寫鎖的套用................. 476
21.2.7 執行緒安全性文檔說明...... 477
21.2.8 不要依賴執行緒優先權...... 478
21.3 總結........................ 479
第22 章高性能之道............ 480
22.1 RPC 調用性能模型分析.......... 480
22.1.1 傳統RPC 調用性能差的三宗罪............... 480
22.1.2 I/O 通信性能三原則........ 481
22.2 Netty 高性能之道.. 482
22.2.1 異步非阻塞通信.............. 482
22.2.2 高效的Reactor 執行緒模型 482
22.2.3 無鎖化的串列設計.......... 485
22.2.4 高效的並發編程.............. 486
22.2.5 高性能的序列化框架...... 486
22.2.6 零拷貝.......... 487
22.2.7 記憶體池.......... 491
22.2.8 靈活的TCP 參數配置能力....................... 494
22.3 主流NIO 框架性能對比......... 495
22.4 總結........................ 497
第23 章可靠性.................... 498
23.1 可靠性需求............ 498
23.1.1 宕機的代價.. 498
23.1.2 Netty 可靠性需求............ 499
23.2 Netty 高可靠性設計................ 500
23.2.1 網路通信類故障.............. 500
23.2.2 鏈路的有效性檢測.......... 507
23.2.3 Reactor 執行緒的保護......... 510
23.2.4 記憶體保護...... 513
23.2.5 流量整形...... 516
23.2.6 優雅停機接口................. 519
23.3 最佳化建議................ 520
23.3.1 傳送佇列容量上限控制... 520
23.3.2 回推傳送失敗的訊息...... 521
23.4 總結........................ 521
第24 章安全性.................... 522
24.1 嚴峻的安全形勢.... 522
24.1.1 OpenSSL Heart bleed 漏洞.......... 522
24.1.2 安全漏洞的代價.............. 523
24.1.3 Netty 面臨的安全風險..... 523
24.2 Netty SSL 安全特性................. 525
24.2.1 SSL 單向認證.................. 525
24.2.2 SSL 雙向認證.................. 532
24.2.3 第三方CA 認證.............. 536
24.3 Netty SSL 源碼分析................. 538
24.3.1 客戶端.......... 538
24.3.2 服務端.......... 541
24.3.3 訊息讀取...... 544
24.3.4 訊息傳送...... 545
24.4 Netty 擴展的安全特性............ 546
24.4.1 IP 地址黑名單機制.......... 547
24.4.2 接入認證...... 548
24.4 總結........................ 550
第25 章Netty 未來展望..... 551
25.1 套用範圍................ 551
25.2 技術演進................ 552
25.3 社區活躍度............ 552
25.4 Road Map ............... 552
25.5 總結........................ 553
附錄A Netty 參數配置表.... 554