開啟主選單

求真百科

來自 孔夫子網 的圖片

Netty權威指南》,李林鋒 著,出版社: 電子工業出版社。

電子工業出版社成立於1982年10月,是工業和信息化部直屬的科技與教育出版社[1],享有「全國優秀出版社」、「講信譽、重服務」的優秀出版社、「全國版權貿易先進單位」、首屆中國出版政府獎「先進出版單位」等榮譽稱號[2]

目錄

內容簡介

《Netty quanwei指南(第2 版)》是異步非阻塞通信領域的經典之作,基於全新版本的Netty 5.0 編寫,是國內首本深入介紹Netty 原理和架構的書籍,也是作者多年實戰經驗的總結和濃縮。內容不僅包含Java NIO入門知識、Netty 的基礎功能開發指導、編解碼框架定製等,還包括私有協議棧定製和開發、Netty 核心類庫源碼分析,以及Netty 的架構剖析。

目錄

基礎篇 走進Java NIO

章 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

章 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

章 分隔符和定長解碼器的應用...... 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 多協議開發和應用

0 章 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

1 章 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

2 章 私有協議棧開發...... 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

3 章 端創建...... 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

4 章 客戶端創建...... 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 功能介紹和源碼分析

5 章 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

6 章 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

7 章 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

8 章 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

9 章 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

參考文獻

  1. 我國出版社的等級劃分和分類標準,知網出書,2021-03-01
  2. 關於我們,電子工業出版社