Netty權威指南
Netty權威指南(非同步非阻塞通訊領域的經典之作,國內首本深入剖析Netty的著作,全面系統講解原理、實戰和原始碼,帶你完美進階Netty工程師。)
李林鋒 著
ISBN 978-7-121-23343-2
2014年6月出版
定價:79.00元
524頁
16開
編輯推薦
- 資深一線專家誠意之作,總結多年實踐經驗,帶你全面掌握Java高併發非同步通訊的首選框架——Netty。
- Facebook、阿里巴巴、1號店、併發程式設計網、JBoss等多位資深技術專家聯名力薦。
《Netty權威指南》是非同步非阻塞通訊領域的經典之作,是國內首本深入分析和講解Netty原理和架構的著作,內容包含基礎功能、高階應用、系統架構、原始碼分析和行業應用,深入闡述了Java I/O的Netty NIO開發、Netty編解碼開發、Netty多協議開發等各方面的技術要點,包含了對原始碼的深刻解讀,並且對Netty的應用現狀和未來趨勢進行分析,旨在幫助從業人員提升自我,更快更明確地發展職業道路。
Netty是什麼?使用Netty能夠做什麼?為什麼要從傳統的Socket開發切換到NIO進行程式設計?為什麼不直接基於JDK的NIO類庫程式設計而選擇Netty?如何全面系統地掌握Netty,進行Netty NIO開發、Netty編解碼開發、Netty多協議開發?如何透過對Netty原始碼的學習獲得更深入地知識?掌握了Netty後,如何將其應用到實際架構中?Netty工程師的就業前景和可涉足的行業是怎樣的?本書都會一一解答。
內容提要
《Netty權威指南》是非同步非阻塞通訊領域的經典之作,基於最新版本Netty 5.0編寫,是國內首本深入介紹Netty原理和架構的技術書籍,也是作者多年實戰經驗的總結和濃縮。在理論方面,講解了Netty的邏輯架構模型和核心類庫的設計原理,而且對Netty在大資料、網際網路、遊戲行業的應用進行了深入分析;實戰方面,從第一個Netty入門程式到私有協議棧的設計和開發,透過實際例程,由淺入深地對Netty的核心API和類庫的功能和用法進行了細緻講解。
《Netty權威指南》適合架構師、設計師、軟體開發工程師、測試人員和其他對Java NIO框架、Java通訊感興趣的相關人士閱讀,相信透過學習《Netty權威指南》,能夠熟悉和掌握Netty這一優秀的非同步通訊框架,實現高可用分散式系統的構建。
目錄
基礎篇 走進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
作者簡介
李林鋒:Netty中國推廣者,現華為技術有限公司平臺中介軟體架構與設計部設計師,公司總裁技術創新獎獲得者。長期從事高效能通訊軟體的架構設計和開發工作,有多年在NIO領域的設計、開發和運維經驗,精通NIO程式設計和Netty、Mina等主流NIO框架。
媒體評論
與林鋒兄相識甚早,他在NIO相關領域實戰經驗豐富,成績斐然,並且樂於分享,旨在幫助更多人得到技術上的進步,是一位我很尊敬的技術思考者、實踐者和推廣者。Netty作為Dubbo底層的高效能分散式通訊框架,在實際開發中,我非常關心如高效序列化/編解碼、執行緒模型調優、高效Buffer使用、心跳重連策略、優雅停機、當機異常處理、NIO併發安全處理等核心問題,而本書中對這些問題都進行了詳細說明,並提煉出了處理原則,給出了提綱挈領般的引導。書中對這些問題的分析總結可以得到不少從頭摸爬滾打才能獲得的收穫,希望你和我一樣能有眼前一亮的感覺。
——阿里巴巴Dubbo、PaaS平臺核心開發架構師李鼎
Netty是一個令人驚訝的專案,在短短几年成為眾多Java高併發非同步通訊的首選框架。但目前國內資料極少並缺乏系統性,而李兄的這本系統介紹Netty開發和原理的書籍,很完美地填補了這個空白。國內的技術人員對Java NIO和Netty理解多一些,也就意味著國內整體網路程式設計技術的進步。本書條理清晰,對技術的闡述循序漸進,是一本難得的Netty學習教材,推薦有志青年仔細學習研究本書,共同把NIO非同步通訊程式設計推向一個新高度。
——JBoss應用伺服器核心開發組成員張建鋒
經常有很多Java領域的應屆生和程式設計師來諮詢我我,說自己非常希望找到心儀的工作,但是不知道如何學習和提高。在Java中我覺得比較有挑戰性的技術就是網路I/O程式設計和多執行緒併發程式設計,而Netty作為企業高效能非同步NIO通訊的首選框架,在Twitter、Facebook、阿里巴巴等著名公司都得到了應用,學習和掌握它,對於個人的職業和技術發展都極具意義。本書正是一本引領我們由淺入深學習Netty的寶典,非常值得仔細研讀和思考。
——併發程式設計網站長方騰飛
網路通訊框架Netty已經逐漸成為了構建高可用分散式系統核心元件通訊的基礎,它的執行緒模型、零複製和多協議支援也讓從業者們愛不釋手,林鋒兄作為國內NIO領域和Netty框架研究最早、水平最高的架構師之一,在本書中對Netty進行了全面的解析,其中大量的原始碼剖析和實戰講解給想學習NIO程式設計和Netty,進階分散式的同學提出了一些思想或者說指引了前進方向,非常推薦。
——1號店資深架構師彭榮新
前言
大約在2008年的時候,我參與設計和開發的一個電信系統在月初出帳期,總是發生大量的連線超時和讀寫超時異常,業務的失敗率相比於平時高了很多,報表中的很多指標都差強人意。後來經過排查,發現問題的主要原因出現在下游網元的處理效能上,月初的時候BSS出帳,在出帳期間BSS系統執行緩慢,由於雙方採用了同步阻塞式的HTTP+XML進行通訊,導致任何一方處理緩慢都會影響對方的處理效能。按照故障隔離的設計原則,對方處理速度慢或者不回應答,不應該影響系統的其他功能模組或者協議棧,但是在同步阻塞I/O通訊模型下,這種故障傳播和相互影響是不可避免的,很難透過業務層面解決。
受限於當時Tomcat和Servlet的同步阻塞I/O模型,以及在Java領域非同步HTTP協議棧的技術積累不足,當時我們並沒有辦法完全解決這個問題,只能透過調整執行緒池策略和HTTP超時時間來從業務層面做規避。
2009年,由於對技術的熱愛,我作為業務骨幹被領導派去參加一個重點業務平臺的研發工作,與兩位資深的架構師(其中一位工作20年,做華為交換機出身)共同參與。這是我第一次全面接觸非同步I/O程式設計和高效能電信級協議棧的開發,眼界大開——非同步高效能內部協議棧、非同步HTTP、非同步SOAP、非同步SMPP……所有的協議棧都是非同步非阻塞。後來的效能測試表明:基於Reactor模型統一排程的長連線和短連線協議棧,無論是效能、可靠性還是可維護性,都可以“秒殺”傳統基於BIO開發的應用伺服器和各種協議棧,這種差異本質上是一種代差。
在我從事非同步NIO程式設計的2009年,業界還沒有成熟的NIO框架,那個時候Mina剛剛開始起步,功能和效能都達不到商用標準。最困難的是,國內Java領域的非同步通訊還沒有流行,整個業界的積累都非常少。那個時候資料匱乏,能夠交流和探討的圈內人很少,一旦踩住“地雷”,就需要夜以繼日地維護。在隨後2年多的時間裡,經歷了10多次的在通宵、凌晨被一線的運維人員電話吵醒等種種磨難之後,我們自研的NIO框架才逐漸穩定和成熟。期間,解決的BUG總計20~30個。
從2004年JDK1.4首次提供NIO 1.0類庫到現在,已經過去了整整10年。JSR 51的設計初衷就是讓Java能夠提供非阻塞、具有彈性伸縮能力的非同步I/O類庫,從而結束Java在高效能伺服器領域的不利地位。然而,在相當長的一段時間裡,Java的NIO程式設計並沒有流行起來,究其原因如下。
1. 大多數高效能伺服器,被C和C++語言盤踞,由於它們可以直接使用作業系統的非同步I/O能力,所以對JDK的NIO並不關心;
2. 移動網際網路尚未興起,基於Java的大規模分散式系統極少,很多中小型應用服務對於非同步I/O的訴求不是很強烈;
3. 高效能、高可靠性領域,例如銀行、證券、電信等依然以C++為主導,Java充當打雜的角色,NIO暫時沒有用武之地;
4. 當時主流的J2EE伺服器,幾乎全部基於同步阻塞I/O構建,例如Servlet、Tomcat等,由於它們應用廣泛,如果這些容器不支援NIO,使用者很難具備獨立構建非同步協議棧的能力;
5. 非同步NIO程式設計門檻比較高,開發和維護一款基於NIO的協議棧對很多中小型公司來說像是一場噩夢;
6. 業界NIO框架不成熟,很難商用;
7. 國內研發界對NIO的陌生和認識不足,沒有充分重視。
基於上述幾種原因,NIO程式設計的推廣和發展長期滯後。值得欣慰的是,隨著大規模分散式系統、大資料和流式計算框架的興起,基於Java來構建這些系統已經成為主流,NIO程式設計和NIO框架在此期間得到了大規模的商用。在網際網路領域,阿里的分散式服務框架Dubbo、RocketMQ,大資料的基礎序列化和通訊框架Avro,以及很多開源的軟體都已經開始使用Netty來構建高效能、分散式通訊能力,Netty社群的活躍度也名列前茅。根據目前的資訊,Netty已經在如下幾個領域得到了大規模的商業應用。
1. 網際網路領域;
2. 電信領域;
3. 大資料領域;
4. 銀行、證券等金融領域;
5. 遊戲行業;
6. 電力等企業市場。
2014年春節前,我分享了一篇博文《Netty5.0架構剖析和原始碼解讀》,短短1個月下載量達到了4000多。很多網友向我諮詢NIO程式設計技術、NIO框架如何選擇等問題,也有一些圈內朋友和出版社邀請我寫一本關於Netty的技術書籍。作為最流行、表現最優異的NIO框架Netty深受大家喜愛,但是長期以來除了UserGuide之外,國內鮮有Netty相關的技術書籍供廣大NIO程式設計愛好者學習和參考。由於Netty原始碼的複雜性和NIO程式設計本身的技術門檻限制,對於大多數讀者而言,透過自己閱讀和分析原始碼來深入掌握Netty的設計原理和實現細節是件困難的事情。從2011年開始我係統性的分析和應用了Netty和Mina,轉瞬間已經過去了3年多。在這3年的時間裡,我們的系統經受了無數嚴苛的考驗,在這個過程中,對Netty和Mina有了更深刻的體驗,也積累了豐富的運維和實戰經驗。我們都是開源框架Netty的受益者,為了讓更多的朋友和同行能夠了解NIO程式設計,深入學習和掌握Netty這個NIO利器,我打算將我的經驗和大家分享,同時也結束國內尚無Netty學習教材的尷尬境地。
內容介紹
本書涵蓋了Netty NIO框架的絕大部分知識點,包括Java I/O的演進歷史、傳統BIO通訊的弊端、Java 4種I/O通訊模型的優缺點對比。以及Netty入門、Netty編解碼框架、檔案傳輸、多協議和私有協議棧定製和開發。在原始碼分析章節,詳細介紹了ByteBuf、Channel和Unsafe、ChannelPipeline和ChannelHandler、NioEventLoop、ChannelFuture和ChannelPromise的設計原理和原始碼分析。在高階應用章節,介紹了Netty的邏輯架構模型、Netty的執行緒模型和行業應用。最後附錄了Netty啟動配置引數項說明。
聯絡方式
儘管我也有技術潔癖,希望諸事完美,但是由於Netty程式碼的龐雜和涉及到的知識點太多,一本書籍很難涵蓋所有的功能點。如有遺漏或者錯誤,懇請大家能夠及時批評和指正,如果你有好的建議或者想法,也可以聯絡我。我的聯絡方式如下:郵箱: neu_lilinfeng@sina.com 新浪微博: Nettying微信:Nettying。
致謝
如果說個人能夠改變自己命運的話,對於程式設計師來說,唯有透過不斷的學習和實踐,努力提升自己的技能,才有可能找到更好的機會,充分發揮和體現自己的價值。我希望本書能夠為你的成功助一臂之力。
感謝博文視點的策劃編輯丁一瓊和幕後的美編,正是你們的辛苦工作才保證了本書能夠順利出版;感謝華為Netty愛好者和關注本書的領導同事們的支援,你們的理解和鼓勵為我提供了足夠的勇氣。感謝我的家人和老婆的支援,寫書佔用了我幾乎所有的業餘時間,沒有你們的理解和支援,我很難安心寫作。
最後感謝Netty中國社群的朋友,我的微博粉絲和所有喜歡Netty的朋友們,你們對技術的熱情是鼓勵我寫書的最重要動力,沒有你們,就沒有本書。希望大家一如既往的喜歡NIO程式設計,喜歡Netty,以及相互交流和分享,共同推動整個國內非同步高效能通訊領域的技術發展。
李林鋒 5月11日於南京紫軒閣
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-1185813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Netty權威指南:Java的I/O演進NettyJava
- Netty權威指南:I/O 多路複用技術Netty
- Netty權威指南:Linux網路 I/O 模型簡介NettyLinux模型
- Git權威指南Git
- HTTP權威指南HTTP
- JavaScript 日期權威指南JavaScript
- 《ZeroC Ice權威指南》
- 讀《Cassandra權威指南》
- JavaScript權威指南(6)——物件JavaScript物件
- [譯] JAVASCRIPT 日期權威指南JavaScript
- JavaScript權威指南-陣列JavaScript陣列
- Java 13權威指南 - CodeFXJava
- JavaScript權威指南(8)——函式JavaScript函式
- JavaScript權威指南(7)——陣列JavaScript陣列
- Elasticsearch 權威指南(中文版)Elasticsearch
- javascript權威指南——函式篇JavaScript函式
- HBase權威指南【中文版】
- 微服務入門權威指南微服務
- 《http權威指南》學習感想HTTP
- ORACLE11G權威指南Oracle
- RPM包的權威指南。
- JavaScript權威指南(9)——類和模組JavaScript
- web基礎——《HTTP權威指南》系列WebHTTP
- 《Git權威指南》讀書筆記Git筆記
- 《Web效能權威指南》推薦序Web
- ORACLE11g權威指南-前言Oracle
- ORACLE11g權威指南-序Oracle
- 《Excelize 權威指南》新書釋出Excelize新書
- JavaScript權威指南(2)——詞法結構JavaScript
- 留學指南權威乾貨與攻略!
- [心得] JavaScript權威指南學習筆記JavaScript筆記
- MongoDB權威指南學習筆記03MongoDB筆記
- javascript權威指南閱讀筆記2JavaScript筆記
- ORACLE11g權威指南-扉頁Oracle
- 好書短評之《SQL權威指南》SQL
- 小記《SQL權威指南(第4版)》SQL
- JavaScript權威指南(4)——表示式和運算子JavaScript
- 表格儲存Tablestore權威指南(持續更新)