基礎篇 走進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源碼分析 31
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源碼分析 52
2.4.3 AIO版本時間服務器運行結果 56
2.5 4種I/O的對比 58
2.5.1 概念澄清 58
2.5.2 不同I/O模型對比 60
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 總結 78
第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粘包問題 88
4.3.1 支持TCP粘包的TimeServer 88
4.3.2 支持TCP粘包的TimeClient 90
4.3.3 運行支持TCP粘包的時間服務器程序 93
4.3.4 LineBasedFrameDecoder和StringDecoder的原理分析 98
4.4 總結 99
第5章 分隔符和定長解碼器的應用 100
5.1 DelimiterBasedFrameDecoder應用開發 101
5.1.1 DelimiterBasedFrameDecoder服務端開發 101
5.1.2 DelimiterBasedFrameDecoder客戶端開發 104
5.1.3 運行DelimiterBasedFrameDecoder服務端和客戶端 106
5.2 FixedLengthFrameDecoder應用開發 108
5.2.1 FixedLengthFrameDecoder服務端開發 108
5.2.2 利用telnet命令行測試EchoServer服務端 110
5.3 總結 111
中級篇 Netty編解碼開發指南
第6章 編解碼技術 114
6.1 Java序列化的缺點 115
6.1.1 無法跨語言 115
6.1.2 序列化後的碼流太大 115
6.1.3 序列化性能太低 118
6.2 業界主流的編解碼框架 121
6.2.1 Google的Protobuf介紹 121
6.2.2 Facebook的Thrift介紹 123
6.2.3 JBoss Marshalling介紹 124
6.3 總結 125
第7章 Java序列化 126
7.1 Netty Java序列化服務端開發 126
7.2 Java序列化Netty客戶端開發 132
7.3 運行結果 135
7.4 總結 137
第8章 Google Protobuf編解碼 138
8.1 Protobuf的入門 139
8.1.1 Protobuf開發環境搭建 139
8.1.2 Protobuf編解碼開發 141
8.1.3 運行Protobuf例程 143
8.2 Netty的Protobuf服務端開發 143
8.2.1 Protobuf版本的圖書訂購服務端開發 144
8.2.2 Protobuf版本的圖書訂購客戶端開發 146
8.2.3 Protobuf版本的圖書訂購程序功能測試 149
8.3 Protobuf的使用注意事項 152
8.4 總結 153
第9章 JBoss Marshalling編解碼 154
9.1 Marshalling開發環境準備 154
9.2 Netty的Marshalling服務端開發 155
9.3 Netty的Marshalling客戶端開發 158
9.4 運行Marshalling客戶端和服務端例程 160
9.5 總結 162
高級篇 Netty多協議開發和應用
第10章 HTTP協議開發應用 164
10.1 HTTP協議介紹 165
10.1.1 HTTP協議的URL 165
10.1.2 HTTP請求消息(HttpRequest) 165
10.1.3 HTTP響應消息(HttpResponse) 168
10.2 Netty HTTP服務端入門開發 169
10.2.1 HTTP服務端例程場景描述 170
10.2.2 HTTP服務端開發 170
10.2.3 Netty HTTP文件服務器例程運行結果 178
10.3 Netty HTTP+XML協議棧開發 182
10.3.1 開發場景介紹 183
10.3.2 HTTP+XML協議棧設計 186
10.3.3 高效的XML綁定框架JiBx 187
10.3.4 HTTP+XML編解碼框架開發 195
10.3.5 HTTP+XML協議棧測試 211
10.3.6 小結 213
10.4 總結 214
第11章 WebSocket協議開發 215
11.1 HTTP協議的弊端 216
11.2 WebSocket入門 216
11.2.1 WebSocket背景 217
11.2.2 WebSocket連接建立 218
11.2.3 WebSocket生命周期 219
11.2.4 WebSocket連接關閉 220
11.3 Netty WebSocket協議開發 221
11.3.1 WebSocket服務端功能介紹 221
11.3.2 WebSocket服務端開發 222
11.3.3 運行WebSocket服務端 230
11.4 總結 231
第12章 UDP協議開發 233
12.1 UDP協議簡介 234
12.2 UDP服務端開發 235
12.3 UDP客戶端開發 238
12.4 運行UDP例程 240
12.5 總結 241
第13章 文件傳輸 242
13.1 文件的基礎知識 243
13.1.1 文件的概念 243
13.1.2 文件路徑 243
13.1.3 文件名稱 244
13.1.4 FileChannel簡介 244
13.2 Netty文件傳輸開發 245
13.3 運行Netty文件傳輸服務例程 248
13.4 總結 250
第14章 私有協議棧開發 251
14.1 私有協議介紹 251
14.2 Netty協議棧功能設計 253
14.2.1 網絡拓撲圖 253
14.2.2 協議棧功能描述 254
14.2.3 通信模型 254
14.2.4 消息定義 255
14.2.5 Netty協議支持的字段類型 256
14.2.6 Netty協議的編解碼規範 257
14.2.7 鏈路的建立 259
14.2.8 鏈路的關閉 260
14.2.9 可靠性設計 260
14.2.10 安全性設計 262
14.2.11 可擴展性設計 262
14.3 Netty協議棧開發 263
14.3.1 數據結構定義 263
14.3.2 消息編解碼 267
14.3.3 握手和安全認證 271
14.3.4 心跳檢測機製 275
14.3.5 斷連重連 278
14.3.6 客戶端代碼 279
14.3.7 服務端代碼 281
14.4 運行協議棧 282
14.4.1 正常場景 282
14.4.2 異常場景:服務端宕機重啓 283
14.4.3 異常場景:客戶端宕機重啓 286
14.5 總結 286
源碼分析篇 Netty功能介紹和源碼分析
第15章 ByteBuf和相關輔助類 290
15.1 ByteBuf功能說明 290
15.1.1 ByteBuf的工作原理 291
15.1.2 ByteBuf的功能介紹 296
15.2 ByteBuf源碼分析 310
15.2.1 ByteBuf的主要類繼承關係 311
15.2.2 AbstractByteBuf源碼分析 312
15.2.3 AbstractReferenceCountedByteBuf源碼分析 321
15.2.4 UnpooledHeapByteBuf源碼分析 323
15.2.5 PooledByteBuf內存池原理分析 328
15.2.6 PooledDirectByteBuf源碼分析 331
15.3 ByteBuf相關的輔助類功能介紹 334
15.3.1 ByteBufHolder 334
15.3.2 ByteBufAllocator 335
15.3.3 CompositeByteBuf 336
15.3.4 ByteBufUtil 338
15.4 總結 339
第16章 Channel和Unsafe 340
16.1 Channel 功能說明 340
16.1.1 Channel的工作原理 341
16.1.2 Channel的功能介紹 342
16.2 Channel源碼分析 345
16.2.1 Channel的主要繼承關係類圖 345
16.2.2 AbstractChannel源碼分析 346
16.2.3 AbstractNioChannel源碼分析 349
16.2.4 AbstractNioByteChannel源碼分析 352
16.2.5 AbstractNioMessageChannel源碼分析 356
16.2.6 AbstractNioMessageServerChannel源碼分析 357
16.2.7 NioServerSocketChannel源碼分析 358
16.2.8 NioSocketChannel源碼分析 360
16.3 Unsafe功能說明 366
16.4 Unsafe源碼分析 367
16.4.1 Unsafe繼承關係類圖 367
16.4.2 AbstractUnsafe源碼分析 367
16.4.3 AbstractNioUnsafe源碼分析 377
16.4.4 NioByteUnsafe源碼分析 380
16.5 總結 387
第17章 ChannelPipeline和ChannelHandler 389
17.1 ChannelPipeline功能說明 390
17.1.1 ChannelPipeline的事件處理 390
17.1.2 自定義攔截器 392
17.1.3 構建pipeline 393
17.1.4 ChannelPipeline的主要特性 394
17.2 ChannelPipeline源碼分析 394
17.2.1 ChannelPipeline的類繼承關係圖 394
17.2.2 ChannelPipeline對ChannelHandler的管理 394
17.2.3 ChannelPipeline的inbound事件 397
17.2.4 ChannelPipeline的outbound事件 398
17.3 ChannelHandler功能說明 399
17.3.1 ChannelHandlerAdapter功能說明 400
17.3.2 ByteToMessageDecoder功能說明 400
17.3.3 MessageToMessageDecoder功能說明 401
17.3.4 LengthFieldBasedFrameDecoder功能說明 402
17.3.5 MessageToByteEncoder功能說明 405
17.3.6 MessageToMessageEncoder功能說明 406
17.3.7 LengthFieldPrepender功能說明 406
17.4 ChannelHandler源碼分析 407
17.4.1 ChannelHandler的類繼承關係圖 407
17.4.2 ByteToMessageDecoder源碼分析 408
17.4.3 MessageToMessageDecoder源碼分析 411
17.4.4 LengthFieldBasedFrameDecoder源碼分析 413
17.4.5 MessageToByteEncoder源碼分析 417
17.4.6 MessageToMessageEncoder源碼分析 418
17.4.7 LengthFieldPrepender源碼分析 419
17.5 總結 420
第18章 EventLoop和EventLoopGroup 421
18.1 Netty的綫程模型 421
18.1.1 Reactor單綫程模型 422
18.1.2 Reactor多綫程模型 423
18.1.3 主從Reactor多綫程模型 424
18.1.4 Netty的綫程模型 425
18.1.5 最佳實踐 427
18.2 NioEventLoop源碼分析 427
18.2.1 NioEventLoop設計原理 427
18.2.2 NioEventLoop繼承關係類圖 428
18.2.3 NioEventLoop 429
18.3 總結 440
第19章 Future和Promise 441
19.1 Future功能 441
19.2 ChannelFuture源碼分析 446
19.3 Promise功能介紹 448
19.4 Promise源碼分析 450
19.4.1 Promise繼承關係圖 450
19.4.2 DefaultPromise 450
19.5 總結 453
架構和行業應用篇 Netty高級特性
第20章 Java多綫程編程在Netty中的應用 456
20.1 Java內存模型與多綫程編程 456
20.1.1 硬件的發展和多任務處理 456
20.1.2 Java內存模型 457
20.2 Netty的並發編程實踐 459
20.2.1 對共享的可變數據進行正確的同步 459
20.2.2 正確的使用鎖 460
20.2.3 volatile的正確使用 462
20.2.4 CAS指令和原子類 465
20.2.5 綫程安全類的應用 467
20.2.6 讀寫鎖的應用 470
20.2.7 綫程安全性文檔說明 472
20.2.8 不要依賴綫程優先級 473
20.3 總結 474
第21章 Netty架構剖析 475
21.1 Netty邏輯架構 475
21.1.1 Reactor通信調度層 476
21.1.2 職責鏈ChannelPipeline 476
21.1.3 業務邏輯編排層(Service ChannelHandler) 477
21.2 關鍵架構質量屬性 477
21.2.1 高性能 477
21.2.2 可靠性 480
21.2.3 可定製性 483
21.2.4 可擴展性 483
21.3 總結 483
第22章 Netty行業應用 484
22.1 Netty在互聯網行業的應用 485
22.1.1 傳統垂直架構麵臨的問題 485
22.1.2 阿裏分布式服務框架Dubbo 485
22.1.3 Dubbo的架構介紹 487
22.1.4 Netty在Dubbo中的應用 489
22.1.5 Dubbo框架集成Netty源碼分析 491
22.2 Netty在大數據領域的應用 496
22.3 Netty在遊戲行業的應用 497
22.3.1 遊戲服務端架構介紹 498
22.3.2 Netty在遊戲服務端的應用 501
22.4 總結 502
第23章 Netty未來展望 503
23.1 應用範圍 503
23.2 技術演進 504
23.3 社區活躍度 504
23.4 Road Map 504
23.5 總結 505
附錄A Netty參數配置錶 506
· · · · · · (
收起)