NO IMAGE

下載地址:網盤下載

內容簡介

編輯

本書是為想要或者正在使用Java 從事高效能網路程式設計的人而寫的,循序漸進地介紹了Netty各個方面的內容。
  本書共分為4 個部分:第一部分詳細地介紹Netty 的相關概念以及核心元件,第二部分介紹自定義協議經常用到的編解碼器,第三部分介紹Netty 對於應用層高階協議的支援,會覆蓋常見的協議及其在實踐中的應用,第四部分是幾個案例研究。此外,附錄部分會還簡單地介紹Maven,以及如何通過使用Maven 編譯和執行本書中的示例。
  閱讀本書不需要讀者精通Java 網路和併發程式設計。如果想要更加深入地理解本書背後的理念以及Netty 原始碼本身,可以系統地學習一下Java 網路程式設計、NIO、併發和非同步程式設計以及相關的設計模式。[1] 

作者簡介

編輯

Norman Maurer,是蘋果公司的資深軟體工程師,同時也是Netty的核心開發人員。
  Marvin Allen Wolfthal,是Dell Services的顧問,他使用Netty實現了多個任務關鍵型的企業系統。
  何品,目前是淘寶的一名資深軟體工程師,熱愛網路、併發、非同步相關的主題以及函數語言程式設計,同時也是Netty、Akka等專案的貢獻者,活躍於Scala社群,目前也在從事GraphQL相關的開發工作。[1] 

目錄

編輯

第一部分 Netty的概念及體系結構
  第1 章 Netty——非同步和事件驅動 3
  1.1 Java 網路程式設計 4
  1.1.1 Java NIO 5
  1.1.2 選擇器 6
  1.2 Netty 簡介 6
  1.2.1 誰在使用Netty 7
  1.2.2 非同步和事件驅動 8
  1.3 Netty 的核心元件 9
  1.3.1 Channel 9
  1.3.2 回撥 9
  1.3.3 Future 10
  1.3.4 事件和ChannelHandler 11
  1.3.5 把它們放在一起 12
  1.4 小結 13
  第2 章 你的第一款Netty應用程式 14
  2.1 設定開發環境 14
  2.1.1 獲取並安裝Java 開發工具包 14
  2.1.2 下載並安裝IDE 15
  2.1.3 下載和安裝Apache Maven 15
  2.1.4 配置工具集 16
  2.2 Netty 客戶端/伺服器概覽 16
  2.3 編寫Echo 伺服器 17
  2.3.1 ChannelHandler 和業務邏輯 17
  2.3.2 引導伺服器 18
  2.4 編寫Echo 客戶端 21
  2.4.1 通過ChannelHandler 實現客戶端邏輯 21
  2.4.2 引導客戶端 22
  2.5 構建和執行Echo 伺服器和客戶端 24
  2.5.1 執行構建 24
  2.5.2 執行Echo 伺服器和客戶端 27
  2.6 小結 29
  第3 章 Netty 的元件和設計 30
  3.1 Channel、EventLoop 和ChannelFuture 30
  3.1.1 Channel 介面 31
  3.1.2 EventLoop 介面 31
  3.1.3 ChannelFuture 介面 32
  3.2 ChannelHandler 和ChannelPipeline 32
  3.2.1 ChannelHandler 介面 32
  3.2.2 ChannelPipeline 介面 33
  3.2.3 更加深入地瞭解ChannelHandler 34
  3.2.4 編碼器和解碼器 35
  3.2.5 抽象類SimpleChannelInboundHandler 35
  3.3 引導 36
  3.4 小結 37
  第4 章 傳輸 38
  4.1 案例研究:傳輸遷移 38
  4.1.1 不通過Netty 使用OIO和NIO 39
  4.1.2 通過Netty 使用OIO和NIO 41
  4.1.3 非阻塞的Netty 版本 42
  4.2 傳輸API 43
  4.3 內建的傳輸 45
  4.3.1 NIO——非阻塞I/O 46
  4.3.2 Epoll——用於Linux的本地非阻塞傳輸 47
  4.3.3 OIO——舊的阻塞I/O 48
  4.3.4 用於JVM 內部通訊的Local 傳輸 48
  4.3.5 Embedded 傳輸 49
  4.4 傳輸的用例 49
  4.5 小結 51
  第5 章 ByteBuf 52
  5.1 ByteBuf 的API 52
  5.2 ByteBuf 類——Netty的資料容器 53
  5.2.1 它是如何工作的 53
  5.2.2 ByteBuf 的使用模式 53
  5.3 位元組級操作 57
  5.3.1 隨機訪問索引 57
  5.3.2 順序訪問索引 57
  5.3.3 可丟棄位元組 58
  5.3.4 可讀位元組 58
  5.3.5 可寫位元組 59
  5.3.6 索引管理 59
  5.3.7 查詢操作 60
  5.3.8 派生緩衝區 60
  5.3.9 讀/寫操作 62
  5.3.10 更多的操作 64
  5.4 ByteBufHolder 介面 65
  5.5 ByteBuf 分配 65
  5.5.1 按需分配:ByteBufAllocator 介面 65
  5.5.2 Unpooled 緩衝區 67
  5.5.3 ByteBufUtil 類 67
  5.6 引用計數 67
  5.7 小結 68
  第6 章 ChannelHandler 和ChannelPipeline 70
  6.1 ChannelHandler 家族 70
  6.1.1 Channel 的生命週期 70
  6.1.2 ChannelHandler的生命週期 71
  6.1.3 ChannelInboundHandler介面 71
  6.1.4 ChannelOutboundHandler介面 73
  6.1.5 ChannelHandler 介面卡 74
  6.1.6 資源管理 74
  6.2 ChannelPipeline 介面 76
  6.2.1 修改ChannelPipeline 78
  6.2.2 觸發事件 79
  6.3 ChannelHandlerContext介面 80
  6.3.1 使用ChannelHandlerContext 82
  6.3.2 ChannelHandler 和ChannelHandlerContext 的高階用法 84
  6.4 異常處理 86
  6.4.1 處理入站異常 86
  6.4.2 處理出站異常 87
  6.5 小結 88
  第7 章 EventLoop 和執行緒模型 89
  7.1 執行緒模型概述 89
  7.2 EventLoop 介面 90
  7.2.1 Netty 4 中的I/O 和事件處理 92
  7.2.2 Netty 3 中的I/O 操作 92
  7.3 任務排程 93
  7.3.1 JDK 的任務排程API 93
  7.3.2 使用EventLoop排程任務 94
  7.4 實現細節 95
  7.4.1 執行緒管理 95
  7.4.2 EventLoop/執行緒的分配 96
  7.5 小結 98
  第8 章 引導 99
  8.1 Bootstrap 類 99
  8.2 引導客戶端和無連線協議 101
  8.2.1 引導客戶端 102
  8.2.2 Channel 和EventLoopGroup 的相容性 103
  8.3 引導伺服器 104
  8.3.1 ServerBootstrap 類 104
  8.3.2 引導伺服器 105
  8.4 從Channel引導客戶端 107
  8.5 在引導過程中新增多個ChannelHandler 108
  8.6 使用Netty 的ChannelOption 和屬性 110
  8.7 引導DatagramChannel 111
  8.8 關閉 112
  8.9 小結 112
  第9 章 單元測試 113
  9.1 EmbeddedChannel概述 113
  9.2 使用EmbeddedChannel測試ChannelHandler 115
  9.2.1 測試入站訊息 115
  9.2.2 測試出站訊息 118
  9.3 測試異常處理 119
  9.4 小結 121
  第二部分 編解碼器
  第10 章 編解碼器框架 125
  10.1 什麼是編解碼器 125
  10.2 解碼器 125
  10.2.1 抽象類ByteToMessageDecoder 126
  10.2.2 抽象類ReplayingDecoder 127
  10.2.3 抽象類MessageToMessageDecoder 128
  10.2.4 TooLongFrameException 類 130
  10.3 編碼器 131
  10.3.1 抽象類MessageToByteEncoder 131
  10.3.2 抽象類MessageToMessageEncoder 132
  10.4 抽象的編解碼器類 133
  10.4.1 抽象類ByteToMessageCodec 133
  10.4.2 抽象類MessageToMessageCodec 134
  10.4.3 CombinedChannelDuplexHandler 類 137
  10.5 小結 138
  第11 章 預置的ChannelHandler和編解碼器 139
  11.1 通過SSL/TLS 保護Netty 應用程式 139
  11.2 構建基於Netty 的HTTP/HTTPS 應用程式 141
  11.2.1 HTTP 解碼器、編碼器和編解碼器 141
  11.2.2 聚合HTTP 訊息 143
  11.2.3 HTTP 壓縮 144
  11.2.4 使用HTTPS 145
  11.2.5 WebSocket 146
  11.3 空閒的連線和超時 148
  11.4 解碼基於分隔符的協議和基於長度的協議 150
  11.4.1 基於分隔符的協議 150
  11.4.2 基於長度的協議 153
  11.5 寫大型資料 155
  11.6 序列化資料 1 57
  11.6.1 JDK 序列化 157
  11.6.2 使用JBoss Marshalling進行序列化 157
  11.6.3 通過Protocol Buffers序列化 159
  11.7 小結 160
  第三部分 網路協議
  第12 章 WebSocket 163
  12.1 WebSocket 簡介 163
  12.2 我們的WebSocket 示例應用程式 164
  12.3 新增WebSocket支援 165
  12.3.1 處理HTTP 請求 165
  12.3.2 處理WebSocket 幀 168
  12.3.3 初始化ChannelPipeline 169
  12.3.4 引導 171
  12.4 測試該應用程式 173
  12.5 小結 176
  第13章 使用UDP 廣播事件 177
  13.1 UDP 的基礎知識 177
  13.2 UDP 廣播 178
  13.3 UDP 示例應用程式 178
  13.4 訊息 POJO:LogEvent 179
  13.5 編寫廣播者 180
  13.6 編寫監視器 185
  13.7 執行LogEventBroadcaster 和LogEventMonitor 187
  13.8 小結 189
  第四部分 案例研究
  第14 章 案例研究,第一部分 193
  14.1 Droplr—構建移動服務 193
  14.1.1 這一切的起因 193
  14.1.2 Droplr 是怎樣工作的 194
  14.1.3 創造一個更加快速的上傳體驗 194
  14.1.4 技術棧 196
  14.1.5 效能 199
  14.1.6 小結——站在巨人的肩膀上 200
  14.2 Firebase—實時的資料同步服務 200
  14.2.1 Firebase 的架構 201
  14.2.2 長輪詢 201
  14.2.3 HTTP 1.1 keep-alive和流水線化 204
  14.2.4 控制SslHandler 205
  14.2.5 Firebase 小結 207
  14.3 Urban Airship—構建移動服務 207
  14.3.1 移動訊息的基礎知識 207
  14.3.2 第三方遞交 208
  14.3.3 使用二進位制協議的例子 209
  14.3.4 直接面向裝置的遞交 211
  14.3.5 Netty 擅長管理大量的併發連線 212
  14.3.6 Urban Airship 小結——跨越防火牆邊界 213
  14.4 小結 214
  第15 章 案例研究,第二部分 215
  15.1 Netty 在Facebook 的使用:Nifty 和Swift 215
  15.1.1 什麼是Thrift 215
  15.1.2 使用Netty 改善Java Thrift 的現狀 216
  15.1.3 Nifty 伺服器的設計 217
  15.1.4 Nifty 非同步客戶端的設計 220
  15.1.5 Swift:一種更快的構建Java Thrift 服務的方式 221
  15.1.6 結果 221
  15.1.7 Facebook 小結 224
  15.2 Netty 在Twitter的使用:Finagle 224
  15.2.1 Twitter 成長的煩惱 224
  15.2.2 Finagle 的誕生 224
  15.2.3 Finagle 是如何工作的 225
  15.2.4 Finagle 的抽象 230
  15.2.5 故障管理 231
  15.2.6 組合服務 232
  15.2.7 未來:Netty 232
  15.2.8 Twitter 小結 233
  15.3 小結 233
  附錄 Maven 介紹 234[1] 

編輯推薦

編輯

Netty之父”Trustin Lee作序推薦;
  阿里巴巴中介軟體高階技術專家為本書中文版作序推薦;
  系統而詳細地介紹了Netty的各個方面並附帶了即用型的優質示例;
  附帶行業一線公司的案例研究;
  極實用的Netty技術書;[1] 
無論是構建高效能的Web、遊戲伺服器、推送系統、RPC框架、訊息中介軟體還是分散式大資料處理引擎,都離不開Netty,在整個行業中,Netty廣泛而成功的應用,使其成為了Java高效能網路程式設計的卓絕框架。
  Netty的現Tech Lead Norman在本書中循序漸進地講解了Netty的各個關鍵部分,在看完本書後,你不但可以熟練地使用Netty來構建以上系統,並且還可以避免很多常見的陷阱。
  無論是想要學習Spring 5 、Spark、Cassandra等這樣的系統,還是通過學習Netty來構建自己的基於Java的高效能網路框架,或者是更加具體的高效能Web或者遊戲伺服器等,本書都將是你的超強拍檔。
  本書中文版基於Netty4.1.9做了修訂,希望本書能夠給你帶來一個接近完美的閱讀體驗,並能幫到你。[1] 

下載地址:網盤下載