Netty 實戰 (Netty in Action) Netty实战

諾曼·毛瑞爾 (Norman Maurer), 馬文·艾倫·沃爾夫泰爾 (Marvin Allen Wolfthal)

  • 出版商: 人民郵電
  • 出版日期: 2017-06-01
  • 定價: $414
  • 售價: 8.5$352
  • 語言: 簡體中文
  • 頁數: 250
  • 裝訂: 平裝
  • ISBN: 7115453683
  • ISBN-13: 9787115453686
  • 相關分類: Java
  • 此書翻譯自: Netty in Action (Paperback)
  • 立即出貨

買這商品的人也買了...

商品描述

Netty實戰 是為想要或者正在使用Java 從事高性能網絡編程的人而寫的,循序漸進地介紹了Netty各個方面的內容。

Netty實戰 共分為4 個部分:diyi部分詳細地介紹Netty 的相關概念以及核心組件,第二部分介紹自定義協議經常用到的編解碼器,第三部分介紹Netty 對於應用層高級協議的支持,會覆蓋常見的協議及其在實踐中的應用,第四部分是幾個案例研究。此外,附錄部分會還簡單地介紹Maven,以及如何通過使用Maven 編譯和運行Netty實戰 中的示例。

閱讀本書不需要讀者精通Java 網絡和並發編程。如果想要更加深入地理解本書背後的理念以及Netty 源碼本身,可以系統地學習一下Java 網絡編程、NIO、並發和異步編程以及相關的設計模式。

目錄大綱

第一部分 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