百人牛牛棋牌
Netty進階之路:跟著案例學Netty
  • 推薦1
  • 收藏4
  • 瀏覽1.8K

Netty進階之路:跟著案例學Netty

李林鋒 (作者) 

  • 書  號:978-7-121-35262-1
  • 出版日期:2018-12-01
  • 頁  數:340
  • 開  本:16(185*235)
  • 出版狀態:上市銷售
  • 維護人:董英
電子書 ¥49.00
購買電子書
紙質版 ¥79.00

相關圖書

深度剖析Apache Dubbo核心技術內幕

翟陸續 (作者)

Dubbo是阿里巴巴開發的一個開源的高性能、高可用、可擴展的分布式RPC調用框架,致力于提供高性能和透明化的 RPC 遠程調用服務解決方案。作為阿里巴巴 SOA...

 

Offer來了:Java面試核心知識點精講(原理篇)

王磊 (作者)

本書是對Java程序員面試必備知識點的總結,詳細講解了JVM原理、多線程、數據結構和算法、分布式緩存、設計模式等面試必備知識點,在講解時不拖泥帶水,力求精簡。 ...

 

Java持續交付

Daniel Bryant (作者) 張若飛 (譯者)

隨著Java 8的發布,以及Spring引導等web/微服務框架的可用性,設計和實現Java驅動的應用程序從來都不是一個更好的時機。但是,在不斷向生產環境交付工...

¥119.00

讀故事學編程——Python王國歷險記(雙色)

李偉 (作者)

這是一本故事書,也是一本編程書。<br>小男孩派森無意中闖入神秘國度—Python 王國,恰好遇到了國王的鸚鵡,于是他們開始了奇幻的冒險之旅。在這個過程中,他們...

¥69.00

全棧技能修煉:使用Angular 和 SpringBoot 打造全棧應用

王芃 (作者)

本書涉及很多平臺、框架和類庫等,主要有前端使用的Angular,后端使用的Spring Boot框架、Spring Security安全框架,數據庫涉及Mong...

¥109.00

21天學通HTML5+CSS3(第2版)

張啟玉 劉剛 (作者)

本書全面、系統、深入地講解了HTML5+CSS3網頁設計與編程的基礎知識與高級應用。在講解過程中,通過大量取自實際操作的案例,將網頁開發知識全面、系統、深入地呈...

¥89.90
Netty將Java NIO接口封裝,提供了全異步編程方式,是各大Java項目的網絡應用開發必備神器。本書作者是國內Netty技術的先行者和布道者,本書是他繼《Netty權威指南》之后的又一力作。
在本書中,作者將在過去幾年實踐中遇到的問題,以及Netty學習者咨詢的相關問題,進行了歸納和總結,以問題案例做牽引,通過對案例進行剖析,講解問題背后的原理,并結合Netty源碼分析,讓讀者能夠真正掌握Netty,在實際工作中少犯錯。
本書中的案例涵蓋了Netty的啟動和停止、內存、并發多線程、性能、可靠性、安全等方面,囊括了Netty絕大多數常用的功能及容易讓人犯錯的地方。在案例的分析過程中,還穿插講解了Netty的問題定位思路、方法、技巧,以及解決問題使用的相關工具,對讀者在實際工作中用好Netty具有很大的幫助和啟發作用。
本書適合架構師、設計師、開發工程師、測試工程師,以及對Java NIO框架、Netty感興趣的其他相關人士閱讀。
內容精選自1000多個一線業務實際案例,真正從原理到實踐全景式講解Netty項目實踐,
快速領悟Netty專家花大量時間積累的經驗,提高編程水平及分析解決問題的能力
李林鋒

10年Java NIO通信框架、平臺中間件架構設計和開發經驗。

目前在華為終端應用市場負責業務微服務化、云化、全球化等相關設計和開發工作。

《Netty權威指南》和《分布式服務框架原理與實踐》作者。
前  言


自2014年《Netty權威指南》出版后,我在技術網站上相繼寫了一些Netty專題文章,涵蓋性能、線程模型、安全性等知識點,受到很多讀者的喜愛。在4年多里,很多讀者及Netty學習者向我咨詢Netty相關的問題,這些問題加起來多達上千個,通過對問題做匯總和分析,可以歸納為如下幾類:
(1)Netty初學者,想了解學習Netty需要儲備哪些技能,掌握哪些知識點,有什么學習技巧可以更快地掌握Netty。
(2)《Netty權威指南》的讀者,學習完理論知識后,想在實際項目中使用,但是真正跟具體項目結合在一起解決實際問題時,又感覺比較棘手,不知道自己使用的方式是否是最優的,希望能夠多學一些案例實踐方面的知識,以便更好地在業務中使用Netty。
(3)在實際項目中遇到了問題的工程師,由于對Netty底層細節掌握得不扎實,無法有效地定位并解決問題。
Netty的一個特點就是入門相對容易,但是真正掌握并精通是非常困難的,原因有如下幾個:
(1)涉及的知識面比較廣。Netty作為一個高性能的NIO通信框架,涉及的知識點包括網絡通信、多線程編程、序列化和反序列化、異步和同步、SSL/TLS安全、內存池、HTTP等各種協議棧,這些知識點在Java語言中本身就是難點和重點,如果對這些基礎知識掌握不扎實,是很難真正掌握好Netty的。
(2)調試比較困難。因為大量使用異步編程接口,以及消息處理過程中的各種線程切換,相比傳統同步代碼,Netty代碼調試難度比較大。
(3)類繼承層次比較深,有些代碼很晦澀(例如內存池)。對于初學者而言,通過閱讀代碼來掌握Netty的難度還是很大的。
(4)代碼規模龐大。目前,Netty的代碼規模已經非常龐大,特別是協議棧部分,提供了對HTTP/2、MQTT、WebSocket等各種協議的支持,相關代碼非常多。如果學習方式不當,抓不住重點,則全量閱讀Netty源碼,既耗時又很難吃透,很容易半途而廢。
(5)資料零散,缺乏與實踐相關的案例。網上Netty的各種資料非常多,但是都以理論講解為主,Netty在各行業中的應用、問題定位技巧及案例實踐方面的資料很少,缺乏系統性的實踐總結,是Netty學習的一大痛點。
在過去的幾年中,我利用業余時間盡量幫大家答疑解惑,但實際上一個人很難回答所有讀者的問題,有些問題需要業務描述、故障場景、日志,甚至要看源碼,而且需要反復多次溝通來弄清楚問題,對于個人而言,時間和精力都很難得到保證。另外,一些比較常見的問題,例如服務端接收不到客戶端的消息,定位手段是可以固化下來的。很多讀者也希望我能寫一本Netty實踐和案例方面的書,通過案例講解讓大家更好地在項目中使用Netty,解決遇到的實際問題。
于是我對手頭大家咨詢的問題做了歸類分析,結合我們自己的業務和平臺多年來在Netty實踐中積累的經驗,寫作了本書。本書以問題案例做牽引,通過對案例進行剖析,講解問題背后的原理,并結合Netty源碼分析,讓讀者能夠真正掌握Netty,在實際工作中少犯錯。在案例的分析過程中,還穿插講解了Netty的問題定位思路、方法、技巧,以及解決問題使用的相關工具,“授人以魚不如授人以漁”,只有掌握了這些才能在項目中更放心地使用Netty。
本書的內容分類主要包括:
(1)Netty的啟動和停止
(2)Netty的內存
(3)Netty的并發多線程
(4)Netty的性能
(5)Netty的可靠性
(6)Netty的安全
(7)Netty的實踐
(8)Netty的學習
書中的案例涵蓋了Netty絕大多數常用的功能,以及容易犯錯的地方,具有通用性和普遍性。學習這些案例,對于在實際業務工作中用好Netty具有很大的幫助和啟發作用。另外,在講解Netty框架本身的同時,也會穿插一些背景知識介紹,例如Java信號量和優雅停機機制、Java的NIO類庫、HTTP協議棧等。知識都是相互關聯的,很難在基礎知識不扎實的情況下掌握更高階的知識。
通過本書的學習,希望廣大Netty初學者和愛好者能夠更快、更好地進入高級階段,在項目中用好Netty,為業務創造更多的價值。
盡管我也有技術潔癖,希望諸事完美,但是由于Netty代碼的龐雜和涉及的知識點太多,以及受限于我個人的經歷和水平,很難在一本書里同時滿足所有讀者的訴求。本書如有遺漏或者錯誤,懇請大家及時批評和指正,如果大家有好的建議或者想法,也可以聯系我。聯系方式如下:
◎微信:Nettying
◎新浪微博:Nettying
能夠完成本書要感謝很多人,首先感謝華為公司給我提供了足夠大的舞臺,感謝華為消費者云服務應用市場團隊領導張凡、葉文武、劉連喜等,以及這些年與我在平臺和業務團隊一起戰斗過的架構師、設計師、開發工程師、測試工程師和資料員等同事。
其次感謝我的家人,你們一直在背后默默地支持我。感謝參與本書編輯的英姐、美工及其他人員,你們的辛苦換來了本書的如期上市。
最后感謝所有《Netty權威指南》和《分布式服務框架原理與實踐》的讀者,你們的支持和鼓勵是我寫作本書的動力源泉。

李林鋒
2018年國慶節于南京

目錄

第1章 Netty服務端意外退出案例 1
1.1 Netty服務端意外退出問題 1
1.1.1 Java Daemon線程簡介 2
1.1.2 Netty服務端啟動原理 4
1.1.3 如何防止Netty服務端意外退出 6
1.1.4 實際項目中的優化策略 8
1.2 Netty優雅退出機制 9
1.2.1 Java優雅退出機制 10
1.2.2 Java優雅退出的注意點 12
1.2.3 Netty優雅退出機制 14
1.2.4 Netty優雅退出原理和源碼分析 15
1.2.5 Netty優雅退出的一些誤區 20
1.3 總結 21
第2章 Netty客戶端連接池資源泄漏案例 22
2.1 Netty連接池資源泄漏問題 22
2.1.1 連接池創建代碼 23
2.1.2 內存溢出和線程膨脹 23
2.1.3 錯用NIO編程模式 25
2.1.4 正確的連接池創建方式 26
2.1.5 并發安全和資源釋放 28
2.2 Netty客戶端創建機制 29
2.2.1 Java NIO客戶端創建原理分析 29
2.2.2 Netty客戶端創建原理分析 32
2.2.3 Bootstrap工具類源碼分析 34
2.3 總結 36
第3章 Netty內存池泄漏疑云案例 37
3.1 Netty內存池泄漏問題 37
3.1.1 路由轉發服務代碼 38
3.1.2 響應消息內存釋放玄機 39
3.1.3 采集堆內存快照分析 42
3.1.4 ByteBuf申請和釋放的理解誤區 45
3.2 Netty內存池工作機制 48
3.2.1 內存池的性能優勢 48
3.2.2 內存池工作原理分析 51
3.2.3 內存池核心代碼分析 54
3.3 總結 58
第4章 ByteBuf故障排查案例 59
4.1 HTTP協議棧ByteBuf使用問題 59
4.1.1 HTTP響應Body獲取異常 59
4.1.2 ByteBuf非法引用問題 63
4.1.3 ByteBuf使用注意事項 66
4.2 Netty ByteBuf實現機制 67
4.2.1 Java原生ByteBuffer的局限性 67
4.2.2 Netty ByteBuf工作原理分析 67
4.2.3 ByteBuf引用計數器工作原理和源碼分析 70
4.3 總結 73
第5章 Netty發送隊列積壓導致內存泄漏案例 74
5.1 Netty發送隊列積壓案例 74
5.1.1 高并發故障場景 74
5.1.2 內存泄漏原因分析 76
5.1.3 如何防止發送隊列積壓 78
5.1.4 其他可能導致發送隊列積壓的因素 80
5.2 Netty消息發送工作機制 82
5.2.1 WriteAndFlushTask原理和源碼分析 83
5.2.2 ChannelOutboundBuffer原理和源碼分析 86
5.2.3 消息發送源碼分析 88
5.2.4 消息發送高低水位控制 94
5.3 總結 95
第6章 API網關高并發壓測性能波動案例 96
6.1 高并發壓測性能波動問題 96
6.1.1 故障場景模擬 96
6.1.2 性能波動原因定位 98
6.1.3 主動內存泄漏定位法 101
6.1.4 網關類產品的優化建議 102
6.2 Netty消息接入內存申請機制 102
6.2.1 消息接入的內存分配原理和源碼分析 102
6.2.2 Netty ByteBuf的動態擴容原理和源碼分析 107
6.3 總結 108
第7章 Netty ChannelHandler并發安全案例 109
7.1 Netty ChannelHandler并發安全問題 109
7.1.1 串行執行的ChannelHandler 110
7.1.2 跨鏈路共享的ChannelHandler 114
7.1.3 ChannelHandler的并發陷阱 116
7.2 Netty ChannelHandler工作機制 118
7.2.1 職責鏈ChannelPipeline原理和源碼分析 118
7.2.2 用戶自定義Event原理和源碼分析 122
7.3 總結 123
第8章 車聯網服務端接收不到車載終端消息案例 124
8.1 車聯網服務端接收不到車載終端消息問題 124
8.1.1 故障現象 125
8.1.2 故障期線程堆棧快照分析 126
8.1.3 NioEventLoop線程防掛死策略 128
8.2 NioEventLoop線程工作機制 129
8.2.1 I/O讀寫操作原理和源碼分析 130
8.2.2 異步任務執行原理和源碼分析 133
8.2.3 定時任務執行原理和源碼分析 135
8.2.4 Netty多線程最佳實踐 137
8.3 總結 137
第9章 Netty 3.X版本升級案例 139
9.1 Netty 3.X的版本升級背景 139
9.1.1 被迫升級場景 140
9.1.2 升級不當遭遇各種問題 140
9.2 版本升級后數據被篡改問題 141
9.2.1 數據篡改原因分析 142
9.2.2 問題總結 143
9.3 升級后上下文丟失問題 143
9.3.1 上下文丟失原因分析 144
9.3.2 依賴第三方線程模型的思考 144
9.4 升級后應用遭遇性能下降問題 145
9.4.1 性能下降原因分析 145
9.4.2 性能優化建議 146
9.5 Netty線程模型變更分析 147
9.5.1 Netty 3.X版本線程模型 147
9.5.2 Netty 4.X版本線程模型 149
9.5.3 線程模型變化點源碼分析 150
9.5.4 線程模型變化總結 152
9.6 總結 154
第10章 Netty并發失效導致性能下降案例 155
10.1 業務ChannelHandler無法并發執行問題 155
10.1.1 服務端并發設計相關代碼分析 155
10.1.2 無法并行執行的EventExecutorGroup 159
10.1.3 并行執行優化策略和結果 161
10.2 Netty DefaultEventExecutor工作機制 163
10.2.1 DefaultEventExecutor原理和源碼分析 164
10.2.2 業務線程池優化策略 165
10.2.3 Netty線程綁定機制原理和源碼分析 168
10.3 總結 170
第11章 IoT百萬長連接性能調優案例 171
11.1 海量長連接接入面臨的挑戰 171
11.1.1 IoT設備接入特點 172
11.1.2 IoT服務端性能優化場景 172
11.1.3 服務端面臨的性能挑戰 172
11.2 智能家居內存泄漏問題 173
11.2.1 服務端內存泄漏原因定位 173
11.2.2 問題背后的一些思考 174
11.3 操作系統參數調優 174
11.3.1 文件描述符 175
11.3.2 TCP/IP相關參數 175
11.3.3 多網卡隊列和軟中斷 177
11.4 Netty性能調優 177
11.4.1 設置合理的線程數 177
11.4.2 心跳優化 180
11.4.3 接收和發送緩沖區調優 183
11.4.4 合理使用內存池 184
11.4.5 防止I/O線程被意外阻塞 185
11.4.6 I/O線程和業務線程分離 187
11.4.7 針對端側并發連接數的流控 187
11.5 JVM相關性能優化 189
11.5.1 GC調優 189
11.5.2 其他優化手段 193
11.6 總結 193
第12章 靜態檢查修改不當引起性能下降案例 195
12.1 Edge Service性能嚴重下降問題 195
12.1.1 Edge Service熱點代碼分析 195
12.1.2 靜態檢查問題不是簡單的一改了之 197
12.1.3 問題反思和改進 200
12.2 克隆和淺拷貝 201
12.2.1 淺拷貝存在的問題 201
12.2.2 Netty的對象拷貝實現策略 203
12.3 總結 204
第13章 Netty性能統計誤區案例 205
13.1 時延毛刺排查相關問題 205
13.1.1 時延毛刺問題初步分析 205
13.1.2 服務調用鏈改進 207
13.1.3 都是同步思維惹的禍 208
13.1.4 正確的消息發送速度性能統計策略 209
13.1.5 常見的消息發送性能統計誤區 212
13.2 Netty關鍵性能指標采集策略 212
13.2.1 Netty I/O線程池性能指標 213
13.2.2 Netty發送隊列積壓消息數 214
13.2.3 Netty消息讀取速度性能統計 215
13.3 總結 215
第14章 gRPC的Netty HTTP/2實踐案例 216
14.1 gRPC基礎入門 216
14.1.1 RPC框架簡介 216
14.1.2 當前主流的RPC框架 218
14.1.3 gRPC框架特點 218
14.1.4 為什么選擇HTTP/2 219
14.2 gRPC Netty HTTP/2服務端工作機制 220
14.2.1 Netty HTTP/2服務端創建原理和源碼分析 220
14.2.2 服務端接收HTTP/2請求消息原理和源碼分析 224
14.2.3 服務端發送HTTP/2響應消息原理和源碼分析 231
14.3 gRPC Netty HTTP/2客戶端工作機制 234
14.3.1 Netty HTTP/2客戶端創建原理和源碼分析 235
14.3.2 客戶端發送HTTP/2請求消息原理和源碼分析 238
14.3.3 客戶端接收HTTP/2響應消息原理和源碼分析 242
14.4 gRPC消息序列化機制 243
14.4.1 Google Protobuf簡介 243
14.4.2 消息的序列化原理和源碼分析 244
14.4.3 消息的反序列化原理和源碼分析 245
14.5 gRPC線程模型 246
14.5.1 服務端線程模型 246
14.5.2 客戶端線程模型 247
14.5.3 線程模型總結 248
14.6 總結 249
第15章 Netty事件觸發策略使用不當案例 250
15.1 channelReadComplete方法被調用多次問題 250
15.1.1 ChannelHandler調用問題 250
15.1.2 生產環境問題模擬重現 252
15.2 ChannelHandler使用的一些誤區總結 255
15.2.1 channelReadComplete方法調用 255
15.2.2 ChannelHandler職責鏈調用 257
15.3 總結 258
第16章 Netty流量整形應用案例 259
16.1 Netty流量整形功能 259
16.1.1 通用的流量整形功能簡介 260
16.1.2 Netty流量整形功能簡介 260
16.2 Netty流量整形應用 261
16.2.1 流量整形示例代碼 261
16.2.2 流量整形功能測試 263
16.3 Netty流量整形工作機制 264
16.3.1 流量整形工作原理和源碼分析 264
16.3.2 并發編程在流量整形中的應用 271
16.3.3 使用流量整形的一些注意事項總結 274
16.4 總結 278
第17章 Netty SSL應用案例 279
17.1 Netty SSL功能簡介 279
17.1.1 SSL安全特性 280
17.1.2 Netty SSL實現機制 281
17.2 Netty客戶端SSL握手超時問題 282
17.2.1 握手超時原因定位 282
17.2.2 Netty SSL握手問題定位技巧 283
17.3 SSL握手性能問題 284
17.3.1 SSL握手性能熱點分析 284
17.3.2 緩存和對象池 285
17.4 SSL事件監聽機制 286
17.4.1 握手成功事件 286
17.4.2 SSL連接關閉事件 286
17.5 總結 287
第18章 Netty HTTPS服務端高并發宕機案例 288
18.1 Netty HTTPS服務端宕機問題 288
18.1.1 客戶端大量超時 288
18.1.2 服務端內存泄漏原因分析 289
18.1.3 NioSocketChannel泄漏原因探究 290
18.1.4 高并發場景下缺失的可靠性保護 292
18.2 功能層面的可靠性優化 294
18.2.1 Netty HTTPS服務端可靠性優化 295
18.2.2 HTTPS客戶端優化 296
18.3 架構層面的可靠性優化 297
18.3.1 端到端架構問題剖析 297
18.3.2 HTTP Client切換到NIO 298
18.3.3 同步RPC調用切換到異步調用 299
18.3.4 協議升級到HTTP/2 303
18.4 總結 307
第19章 MQTT服務接入超時案例 308
19.1 MQTT服務接入超時問題 308
19.1.1 生產環境問題現象 308
19.1.2 連接數膨脹原因分析 309
19.1.3 無效連接的關閉策略 309
19.1.4 問題總結 310
19.2 基于Netty的可靠性設計 311
19.2.1 業務定制I/O異常 311
19.2.2 鏈路的有效性檢測 312
19.2.3 內存保護 313
19.3 總結 315
第20章 Netty實踐總結 316
20.1 Netty學習策略 316
20.1.1 入門知識準備 316
20.1.2 Netty入門學習 319
20.1.3 項目實踐 319
20.1.4 Netty源碼閱讀策略 319
20.2 Netty故障定位技巧 320
20.2.1 接收不到消息 320
20.2.2 內存泄漏 321
20.2.3 性能問題 322
20.3 總結 322

讀者評論

  • Netty4.x案例從入門學習到應用實戰,全篇(基礎篇(12)、中級篇(10)、高級篇(3章))+源碼分析篇,基本全部完成,代碼已經更新。歡迎關注公眾號:bugstack蟲洞棧 | 進行下載學習。感謝支持,中秋快樂。、
    netty案例,netty4.1中級拓展篇九《Netty集群部署實現跨服務端通信的落地方案》

    bugstack蟲洞棧發表于 2019/9/15 13:58:20
  • 第17章SSL認證,資源里沒有例子。能不能在這一章增加個ssl雙向認證的例子?

    prof_zhang發表于 2019/8/13 16:33:49
  • 這個書中的代碼錯誤好多啊!

    duanxing發表于 2019/2/23 10:41:39
  • //這塊代碼怎么在內部類中使用 書中的第8頁代碼部分
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();

    Janle發表于 2018/12/26 11:12:12
  • 第191頁,表11-1 J**a堆大小設置原則,在JDK8的時候已經取消了永久代了,是不是寫這個不太合適?

    smallratluobin發表于 2018/12/3 21:27:04

電子書版本

  • Epub

相關博文

  • 跟著案例學Netty:Netty內存池泄漏問題

    跟著案例學Netty:Netty內存池泄漏問題

    管理員賬號 2018-11-28

    小編說:Netty是Java高性能網絡編程的明星框架,本文選自《Netty進階之路:跟著案例學Netty》一書,書中內容精選自1000多個一線業務實際案例,真正從原理到實踐全景式講解Netty項目實踐。 為了提升消息接收和發送性能...

    管理員賬號 2018-11-28
    1078 1 3 2

推薦用戶

百人牛牛棋牌 6068160840098295917968236477876697413246879295939981526990615091921674828255256016182532987259846 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();