-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Netty 4核心原理與手寫RPC框架實戰

( 簡體 字)
作者:譚勇德(Tom)類別:1. -> 程式設計 -> 綜合
譯者:
出版社:電子工業出版社Netty 4核心原理與手寫RPC框架實戰 3dWoo書號: 52494
詢問書籍請說出此書號!

缺書
NT售價: 540

出版日:3/1/2020
頁數:456
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121385063
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

序 言


在互聯網分布式系統的推動下,Netty作為一個能夠支撐高性能、高并發的底層網絡通信框架而存在。Netty底層是基于Java NIO實現的,對NIO進行了非常多的優化,因此深受廣大開發者尤其是一線大廠開發者的青睞。
作為一個Java開發者,如果沒有研究過Netty,那么你對Java語言的使用和理解可能僅僅停留在表面,會點SSH,寫幾個MVC,訪問數據庫和緩存,這些只是初級Java開發者做的事。如果你要進階,想了解Java服務器的高階知識,Netty是一個必須要跨越的門檻。學會了Netty,你可以實現自己的HTTP服務器、FTP服務器、UDP服務器、RPC服務器、WebSocket服務器、Redis的Proxy服務器、MySQL的Proxy服務器等。
如果你想知道Nginx是怎么寫出來的,
如果你想知道Tomcat和Jetty是如何實現的,
如果你也想實現一個簡單的Redis服務器,
……
那么你應該好好研究一下Netty,它們高性能的原理都是類似的。
因為Netty 5.x已被官方棄用,本書內容基于Netty 4分析其核心原理,培養高級開發者自己“造輪子”的能力。本書不僅講述理論知識,還圍繞能夠落地的實戰場景,開創手寫源碼的學習方式,使讀者學習源碼更加高效。本書的主要特色是首次提供了基于Netty手寫RPC框架、基于Netty手寫消息推送系統等實戰案例。
關于本書
適用對象 ?不知道Netty能做什么的人群
? 想深入了解Netty源碼實現原理的人群
? 看源碼找不到入口、無從下手的人群
? 想了解設計模式在Netty源碼中如何應用的人群
CentOS版本 7.0
源碼版本 Netty 4.1.6
IDE版本 IntelliJ IDEA 2017.1.4
JDK版本 JDK 1.8及以上
Gradle版本 Gradle 4.0及以上
Maven版本 3.5.0及以上
隨書源碼會持續更新。
關于我
為什么都叫我“文藝湯”?
我自幼愛好書法和美術,長了一雙能書會畫的手,而且手指又長又白,因此以前的藝名叫“玉手藝人”。中學期間,曾獲市級書法競賽一等獎,校園美術競賽一等獎,校園征文比賽二等獎。擔任過學生會宣傳部長,負責校園黑板報、校園刊物的編輯、排版、設計。
2008年參加工作后,我做過家具建模、平面設計等工作,親自設計了咕泡學院的Logo。做講師之后,我給自己起了一個跟姓氏諧音的英文名字“Tom”,江湖人稱“編程界寫字寫得最好的、書法界編程最牛的文藝湯”。
我的技術生涯
我的IT技術生涯應該算是從2009年開始的,在此之前做過UI設計,做過前端網頁,到2009年才真正開始參與Java后臺開發。在這里要感謝所有幫助我入門編程的同事和老師。2010年至2014年擔任過項目組長、項目經理、架構師、技術總監,對很多的開源框架建立了自己的獨特見解。我會習慣性地用形象思維來理解抽象世界。譬如:看到二進制數0和1,我會想到《周易》中的兩儀——陰和陽;看到顏色值用RGB表示,我會想到美術理論中的太陽光折射三原色;下班回家看到炒菜流程,我會想到模板方法模式;坐公交車看到學生卡、老人卡、愛心卡,我會想到策略模式;等等。大家看到的這本書,很多地方都融入了這種形象思維。
為什么寫書?
自2019年《Spring 5核心原理與30個類手寫實戰》出版以來,深受廣大讀者喜愛,有些學員將此書作為學習的參考教材。為繼續滿足大家對技術的追求,借此機會將本人多年對Netty的研究筆記整理成書奉獻給各位“湯粉”。
在此,特別感謝責任編輯董英、李秀梅及電子社的團隊成員的付出,尤其在疫情期間,即使是遠程辦公也同樣堅守崗位審稿至深夜。

譚勇德(Tom)
2020年3月 于 長沙
內容簡介:

《Netty 4核心原理與手寫RPC框架實戰》首先從硬件層面深入分析網絡通信原理,結合Java對網絡I/O的API實現,將理論與實踐串聯起來,幫助大家透徹理解網絡通信的起源,然后介紹Netty產生的背景并基于Netty手寫Tomcat和RPC框架,幫助大家初步了解Netty的作用,接著分析Netty的核心原理和核心組件,基于Netty手寫一個消息推送系統并進行性能調優,最后介紹設計模式在Netty中的應用和經典的面試題分析。如果你想深入了解網絡通信原理,如果你還不知道Netty能做什么,如果你想深入了解Netty的實現原理,如果你看源碼找不到入口,無從下手,如果你想了解設計模式在Netty中的應用,本書都能幫到你。
目錄:

第 1 篇 I/O 基礎篇
第 1 章 網絡通信原理............. 2
1.1 網絡基礎架構 .............. 2
1.1.1 C/S 架構 ............... 2
1.1.2 C/S 信息傳輸流程 ............. 2
1.2 TCP/IP 五層模型詳解 ............. 3
1.2.1 物理層 ................ 3
1.2.2 數據鏈路層 ................ 4
1.2.3 網絡層 ................ 5
1.2.4 傳輸層 ................ 10
1.2.5 應用層 ............... 15
1.2.6 小結 ................ 16
1.3 網絡通信實現原理 .............. 18
1.4 向瀏覽器輸入 URL 后發生了什么 .......... 19
1.5 網絡通信之“魂”——Socket ...........21
第 2 章 Java I/O 演進之路 ............23
2.1 I/O 的問世 ............... 23
2.1.1 什么是 I/O ............... 23
2.1.2 I/O 交互流程 .............. 24
2.2 五種 I/O 通信模型 .............. 25
2.2.1 阻塞 I/O 模型 .............. 25
2.2.2 非阻塞 I/O 模型 ............... 26
2.2.3 多路復用 I/O 模型 .............. 27
2.2.4 信號驅動 I/O 模型 ............. 28
2.2.5 異步 I/O 模型 ............... 28
2.2.6 易混淆的概念澄清 ............. 29
2.2.7 各 I/O 模型的對比與總結 ............. 32
2.3 從 BIO 到 NIO 的演進 ............ 33
2.3.1 面向流與面向緩沖 ............. 33
2.3.2 阻塞與非阻塞 ............... 33
2.3.3 選擇器在 I/O 中的應用 ............ 34
2.3.4 NIO 和 BIO 如何影響應用程序的設計 .......... 34
2.4 Java AIO 詳解 ............... 37
2.4.1 AIO 基本原理 ............... 37
2.4.2 AIO 初體驗 ................ 38
第 2 篇 Netty 初體驗
第 3 章 Netty 與 NIO 之前世今生 ........... 44
3.1 Java NIO 三件套 .............. 44
3.1.1 緩沖區 ................ 44
3.1.2 選擇器 ................ 54
3.1.3 通道 ................ 58
3.2 NIO 源碼初探 .............. 63
3.3 反應堆 ............... 69
3.4 Netty 與 NIO .............. 70
3.4.1 Netty 支持的功能與特性 ............ 70
3.4.2 Netty 采用 NIO 而非 AIO 的理由 ............ 71
第 4 章 基于 Netty 手寫 Tomcat........... 72
4.1 環境準備 ............... 72
4.1.1 定義 GPServlet 抽象類 ............ 72
4.1.2 創建用戶業務代碼 ............. 73
4.1.3 完成 web.properties 配置 ............. 74
4.2 基于傳統 I/O 手寫 Tomcat ........... 74
4.2.1 創建 GPRequest 對象 ............. 74
4.2.2 創建 GPResponse 對象 ............. 76
4.2.3 創建 GPTomcat 啟動類 .............. 77
4.3 基于 Netty 重構 Tomcat 實現 ............ 80
4.3.1 重構 GPTomcat 邏輯 ............. 80
4.3.2 重構 GPRequest 邏輯 ............. 83
4.3.3 重構 GPResponse 邏輯 ............ 84
4.3.4 運行效果演示 ............... 85
第 5 章 基于 Netty 重構 RPC 框架 .......... 87
5.1 RPC 概述 ................ 87
5.2 環境預設 ............... 88
5.3 代碼實戰 ............... 91
5.3.1 創建 API 模塊 ............... 91
5.3.2 創建自定義協議 ............... 91
5.3.3 實現 Provider 業務邏輯 ............. 92
5.3.4 完成 Registry 服務注冊 ............. 93
5.3.5 實現 Consumer 遠程調用 ............. 97
5.3.6 Monitor 監控 ............... 101
5.4 運行效果演示 ............... 102
第 3 篇 Netty 核心篇
第 6 章 Netty 高性能之道 ............. 104
6.1 背景介紹 ............... 104
6.1.1 Netty 驚人的性能數據 ............... 104
6.1.2 傳統 RPC 調用性能差的“三宗罪”........... 104
6.1.3 Netty 高性能的三個主題 ............. 105
6.2 Netty 高性能之核心法寶 ............ 106
6.2.1 異步非阻塞通信 ............... 106
6.2.2 零拷貝 ................. 108
6.2.3 內存池 ................. 112
6.2.4 高效的 Reactor 線程模型 ............. 116
6.2.5 無鎖化的串行設計理念 ............. 118
6.2.6 高效的并發編程 ............... 119
6.2.7 對高性能的序列化框架的支持 ............. 119
6.2.8 靈活的 TCP 參數配置能力 .............. 120
第 7 章 揭開 Bootstrap 的神秘面紗............ 124
7.1 客戶端 Bootstrap .............. 124
7.1.1 Channel 簡介 ................ 124
7.1.2 NioSocketChannel 的創建 .............. 125
7.1.3 客戶端 Channel 的初始化 .............. 127
7.1.4 Unsafe 屬性的初始化 ............... 130
7.1.5 ChannelPipeline 的初始化 .............. 131
7.1.6 EventLoop 的初始化 .............. 132
7.1.7 將 Channel 注冊到 Selector .............. 137
7.1.8 Handler 的添加過程 ............... 139
7.1.9 客戶端發起連接請求 ............... 141
7.2 服務端 ServerBootstrap ............ 144
7.2.1 NioServerSocketChannel 的創建 ............. 146
7.2.2 服務端 Channel 的初始化 .............. 146
7.2.3 服務端 ChannelPipeline 的初始化 ........... 149
7.2.4 將服務端 Channel 注冊到 Selector ............ 149
7.2.5 bossGroup 與 workerGroup............. 149
7.2.6 服務端 Selector 事件輪詢 .............. 152
7.2.7 Netty 解決 JDK 空輪詢 Bug............. 154
7.2.8 Netty 對 Selector 中 KeySet 的優化 ............ 157
7.2.9 Handler 的添加過程 ............... 160
第 8 章 大名鼎鼎的 EventLoop ........... 164
8.1 EventLoopGroup 與 Reactor ........... 164
8.1.1 再談 Reactor 線程模型 ............. 164
8.1.2 EventLoopGroup 與 Reactor 關聯 ........... 166
8.1.3 EventLoopGroup 的實例化 .............. 167
8.2 任務執行者 EventLoop ............. 169
8.2.1 NioEventLoop 的實例化過程 ............ 170
8.2.2 EventLoop 與 Channel 的關聯 ............. 171
8.2.3 EventLoop 的啟動 .............. 172
第 9 章 Netty 大動脈 Pipeline ............. 176
9.1 Pipeline 設計原理 .............. 176
9.1.1 Channel 與 ChannelPipeline ............. 176
9.1.2 再談 ChannelPipeline 的初始化 ............. 177
9.1.3 ChannelInitializer 的添加............. 178
9.1.4 自定義 ChannelHandler 的添加過程 ........... 181
9.1.5 給 ChannelHandler 命名 ............. 184
9.1.6 ChannelHandler 的默認命名規則 ............ 185
9.2 Pipeline 的事件傳播機制 ............ 186
9.2.1 Outbound 事件傳播方式 .............. 194
9.2.2 Inbound 事件傳播方式 ............... 196
9.2.3 小結 ................. 199
9.3 Handler 的各種“姿勢” ............ 200
9.3.1 ChannelHandlerContext .............. 200
9.3.2 Channel 的生命周期 ............... 201
9.3.3 ChannelHandler 常用的 API .............. 201
9.3.4 ChannelInboundHandler .............. 202
第 10 章 異步處理雙子星 Future 與 Promise .......... 204
10.1 異步結果 Future .............. 204
10.2 異步執行 Promise .............. 205
第 11 章 Netty 內存分配 ByteBuf ............ 209
11.1 初識 ByteBuf .............. 209
11.1.1 ByteBuf 的基本結構 ............... 209
11.1.2 ByteBuf 的重要 API ............... 210
11.1.3 ByteBuf 的基本分類 ............... 213
11.2 ByteBufAllocator 內存管理器 ........... 214
11.3 非池化內存分配 ............. 218
11.3.1 堆內內存的分配 ............... 218
11.3.2 堆外內存的分配 ............... 221
11.4 池化內存分配 ............. 224
11.4.1 PooledByteBufAllocator 簡述 ............ 224
11.4.2 DirectArena 內存分配流程 .............. 229
11.4.3 內存池的內存規格 ............... 231
11.4.4 命中緩存的分配 ............... 231
11.4.5 Page 級別的內存分配 .............. 241
11.4.6 SubPage 級別的內存分配 .............. 254
11.4.7 內存池 ByteBuf 的內存回收 ............ 268
11.4.8 SocketChannel 讀取 ByteBuf 的過程 ............ 273
第 12 章 Netty 編解碼的藝術 ............. 281
12.1 什么是拆包、粘包 ............. 281
12.1.1 TCP 拆包、粘包 ................ 281
12.1.2 粘包問題的解決策略 ............... 282
12.2 什么是編解碼 ............. 282
12.2.1 編解碼技術 ............... 282
12.2.2 Netty 為什么要提供編解碼框架 ............. 283
12.3 Netty 中常用的解碼器 ............ 284
12.3.1 ByteToMessageDecoder 抽象解碼器 ........... 284
12.3.2 LineBasedFrameDecoder 行解碼器 ........... 289
12.3.3 DelimiterBasedFrameDecoder 分隔符解碼器 ......... 296
12.3.4 FixedLengthFrameDecoder 固定長度解碼器 .......... 302
12.3.5 LengthFieldBasedFrameDecoder 通用解碼器 ......... 303
12.4 Netty 編碼器原理和數據輸出 ........... 307
12.4.1 WriteAndFlush 事件傳播 ............. 307
12.4.2 MessageToByteEncoder 抽象編碼器 ........... 311
12.4.3 寫入 Buffer 隊列 ............... 312
12.4.4 刷新 Buffer 隊列 ............... 316
12.4.5 數據輸出回調 ............... 322
12.5 自定義編解碼 ............. 335
12.5.1 MessageToMessageDecoder 抽象解碼器 .......... 335
12.5.2 MessageToMessageEncoder 抽象編碼器 .......... 336
12.5.3 ObjectEncoder 序列化編碼器 ............ 337
12.5.4 LengthFieldPrepender 通用編碼器 ............ 338
第 4 篇 Netty 實戰篇
第 13 章 基于 Netty 手寫消息推送系統 .......... 342
13.1 環境搭建 ............... 342
13.2 多協議通信設計 .............. 343
13.2.1 自定義協議規則 ............... 343
13.2.2 自定義編解碼器 ............... 346
13.2.3 對 HTTP 的支持 ............... 349
13.2.4 對自定義協議的支持 ............... 351
13.2.5 對 WebSocket 協議的支持 ............. 351
13.3 服務端邏輯處理 ............. 352
13.3.1 多協議串行處理 ............... 352
13.3.2 服務端用戶中心 ............... 354
13.4 客戶端控制臺處理 ............. 359
13.4.1 控制臺接入代碼 ............... 359
13.4.2 控制臺消息處理 ............... 360
13.5 客戶端 Web 頁面交互實現 ............ 363
13.5.1 Web 頁面設計 ............... 363
13.5.2 WebSocket 接入 ................ 365
13.5.3 登錄和退出 ............... 366
13.5.4 發送文字信息 ............... 367
13.5.5 發送圖片表情 ............... 368
13.5.6 發送鮮花雨特效 ............... 369
第 14 章 Netty 高性能調優工具類解析 .......... 371
14.1 多線程共享 FastThreadLocal ............ 371
14.1.1 FastThreadLocal 的使用和創建 ............. 371
14.1.2 FastThreadLocal 的設值 ............. 379
14.2 Recycler 對象回收站 ............. 381
14.2.1 Recycler 的使用和創建 ............. 381
14.2.2 從 Recycler 中獲取對象 ............. 386
14.2.3 相同線程內的對象回收 ............. 389
14.2.4 不同線程間的對象回收 ............. 391
14.2.5 獲取不同線程間釋放的對象 ............. 397
第 15 章 單機百萬連接性能調優 ............ 405
15.1 模擬 Netty 單機連接瓶頸 ............ 405
15.2 單機百萬連接調優解決思路 ........... 410
15.2.1 突破局部文件句柄限制 ............. 410
15.2.2 突破全局文件句柄限制 ............. 412
15.3 Netty 應用級別的性能調優 ........... 413
15.3.1 Netty 應用級別的性能瓶頸復現 ............. 413
15.3.2 Netty 應用級別的性能調優方案 ............. 420
第 16 章 設計模式在 Netty 中的應用 .......... 422
16.1 單例模式源碼舉例 ............. 422
16.2 策略模式源碼舉例 ............. 423
16.3 裝飾者模式源碼舉例 ............. 424
16.4 觀察者模式源碼舉例 ............. 426
16.5 迭代器模式源碼舉例 ............. 427
16.6 責任鏈模式源碼舉例 ............. 428
16.7 工廠模式源碼舉例 ............. 430
第 17 章 Netty 經典面試題集錦........... 432
17.1 基礎知識部分 ............. 432
17.1.1 TCP 和 UDP 的根本區別 ............. 432
17.1.2 TCP 如何保證可靠傳輸 ............. 433
17.1.3 Netty 能解決什么問題 ............. 433
17.1.4 選用 Netty 作為通信組件框架的舉例 .......... 433
17.1.5 Netty 有哪些主要組件,它們之間有什么關聯 .......... 433
17.2 高級特性部分 ............. 434
17.2.1 相較同類框架,Netty 有哪些優勢 ........... 434
17.2.2 Netty 的高性能體現在哪些方面 ............. 434
17.2.3 默認情況下 Netty 起多少線程,何時啟動 .......... 434
17.2.4 Netty 有幾種發送消息的方式 ............. 434
17.2.5 Netty 支持哪些心跳類型設置 ............. 435
17.2.6 Netty 和 Tomcat 的區別 ............. 435
17.2.7 在實際應用中,如何確定要使用哪些編解碼器 ......... 435
序: