首先從硬體層面深入分析網路通信原理,結合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.1C/S架構.2
1.1.2C/S資訊傳輸流程.2
1.2TCP/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章JavaI/O演進之路.23
2.1I/O的問世.23
2.1.1什麼是I/O.23
2.1.2I/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.4NIO和BIO如何影響應用程式的設計.34
2.4JavaAIO詳解.37
2.4.1AIO基本原理.37
2.4.2AIO初體驗.38
第2篇Netty初體驗
第3章Netty與NIO之前世今生.44
3.1JavaNIO三件套.44
3.1.1緩衝區.44
3.1.2選擇器.54
3.1.3通道.58
3.2NIO源碼初探.63
3.3反應堆.69
3.4Netty與NIO.70
3.4.1Netty支援的功能與特性.70
3.4.2Netty採用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.1RPC概述.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.6Monitor監控.101
5.4運行效果演示.102
第3篇Netty核心篇
第6章Netty高性能之道.104
6.1背景介紹.104
6.1.1Netty驚人的性能資料.104
6.1.2傳統RPC調用性能差的“三宗罪”.104
6.1.3Netty高性能的三個主題.105
6.2Netty高性能之核心法寶.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.1Channel簡介.124
7.1.2NioSocketChannel的創建.125
7.1.3用戶端Channel的初始化.127
7.1.4Unsafe屬性的初始化.130
7.1.5ChannelPipeline的初始化.131
7.1.6EventLoop的初始化.132
7.1.7將Channel註冊到Selector.137
7.1.8Handler的添加過程.139
7.1.9用戶端發起連接請求.141
7.2服務端ServerBootstrap.144
7.2.1NioServerSocketChannel的創建.146
7.2.2服務端Channel的初始化.146
7.2.3服務端ChannelPipeline的初始化.149
7.2.4將服務端Channel註冊到Selector.149
7.2.5bossGroup與workerGroup.149
7.2.6服務端Selector事件輪詢.152
7.2.7Netty解決JDK空輪詢Bug.154
7.2.8Netty對Selector中KeySet的優化.157
7.2.9Handler的添加過程.160
第8章大名鼎鼎的EventLoop.164
8.1EventLoopGroup與Reactor.164
8.1.1再談Reactor執行緒模型.164
8.1.2EventLoopGroup與Reactor關聯.166
8.1.3EventLoopGroup的產生實體.167
8.2任務執行者EventLoop.169
8.2.1NioEventLoop的產生實體過程.170
8.2.2EventLoop與Channel的關聯.171
8.2.3EventLoop的啟動.172
第9章Netty大動脈Pipeline.176
9.1Pipeline設計原理.176
9.1.1Channel與ChannelPipeline.176
9.1.2再談ChannelPipeline的初始化.177
9.1.3ChannelInitializer的添加.178
9.1.4自訂ChannelHandler的添加過程.181
9.1.5給ChannelHandler命名.184
9.1.6ChannelHandler的預設命名規則.185
9.2Pipeline的事件傳播機制.186
9.2.1Outbound事件傳播方式.194
9.2.2Inbound事件傳播方式.196
9.2.3小結.199
9.3Handler的各種“姿勢”.200
9.3.1ChannelHandlerContext.200
9.3.2Channel的生命週期.201
9.3.3ChannelHandler常用的API.201
9.3.4ChannelInboundHandler.202
第10章非同步處理雙子星Future與Promise.204
10.1非同步結果Future.204
10.2非同步執行Promise.205
第11章Netty記憶體分配ByteBuf.209
11.1初識ByteBuf.209
11.1.1ByteBuf的基本結構.209
11.1.2ByteBuf的重要API.210
11.1.3ByteBuf的基本分類.213
11.2ByteBufAllocator記憶體管理器.214
11.3非池化記憶體分配.218
11.3.1堆內記憶體的分配.218
11.3.2堆外記憶體的分配.221
11.4池化記憶體分配.224
11.4.1PooledByteBufAllocator簡述.224
11.4.2DirectArena記憶體分配流程.229
11.4.3記憶體池的記憶體規格.231
11.4.4命中緩存的分配.231
11.4.5Page級別的記憶體分配.241
11.4.6SubPage級別的記憶體分配.254
11.4.7記憶體池ByteBuf的記憶體回收.268
11.4.8SocketChannel讀取ByteBuf的過程.273
第12章Netty編解碼的藝術.281
12.1什麼是拆包、粘包.281
12.1.1TCP拆包、粘包.281
12.1.2粘包問題的解決策略.282
12.2什麼是編解碼.282
12.2.1編解碼技術.282
12.2.2Netty為什麼要提供編解碼框架.283
12.3Netty中常用的解碼器.284
12.3.1ByteToMessageDecoder抽象解碼器.284
12.3.2LineBasedFrameDecoder行解碼器.289
12.3.3DelimiterBasedFrameDecoder分隔符號號號號解碼器.296
12.3.4FixedLengthFrameDecoder固定長度解碼器.302
12.3.5LengthFieldBasedFrameDecoder通用解碼器.303
12.4Netty編碼器原理和資料輸出.307
12.4.1WriteAndFlush事件傳播.307
12.4.2MessageToByteEncoder抽象編碼器.311
12.4.3寫入Buffer佇列.312
12.4.4刷新Buffer佇列.316
12.4.5資料輸出回檔.322
12.5自訂編解碼.335
12.5.1MessageToMessageDecoder抽象解碼器.335
12.5.2MessageToMessageEncoder抽象編碼器.336
12.5.3ObjectEncoder序列化編碼器.337
12.5.4LengthFieldPrepender通用編碼器.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.1Web頁面設計.363
13.5.2WebSocket接入.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.1FastThreadLocal的使用和創建.371
14.1.2FastThreadLocal的設值.379
14.2Recycler對象回收站.381
14.2.1Recycler的使用和創建.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.3Netty應用級別的性能調優.413
15.3.1Netty應用級別的性能瓶頸複現.413
15.3.2Netty應用級別的性能調優方案.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.1TCP和UDP的根本區別.432
17.1.2TCP如何保證可靠傳輸.433
17.1.3Netty能解決什麼問題.433
17.1.4選用Netty作為通信元件框架的舉例.433
17.1.5Netty有哪些主要元件,它們之間有什麼關聯.433
17.2不錯特性部分.434
17.2.1相較同類框架,Netty有哪些優勢.434
17.2.2Netty的高性能體現在哪些方面.434
17.2.3預設情況下Netty起多少執行緒,何時啟動.434
17.2.4Netty有幾種發送消息的方式.434
17.2.5Netty支援哪些心跳類型設置.435
17.2.6Netty和Tomcat的區別.435
17.2.7在實際應用中,如何確定要使用哪些轉碼器.435
第1章網路通信原理.2
1.1網路基礎架構.2
1.1.1C/S架構.2
1.1.2C/S資訊傳輸流程.2
1.2TCP/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章JavaI/O演進之路.23
2.1I/O的問世.23
2.1.1什麼是I/O.23
2.1.2I/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.4NIO和BIO如何影響應用程式的設計.34
2.4JavaAIO詳解.37
2.4.1AIO基本原理.37
2.4.2AIO初體驗.38
第2篇Netty初體驗
第3章Netty與NIO之前世今生.44
3.1JavaNIO三件套.44
3.1.1緩衝區.44
3.1.2選擇器.54
3.1.3通道.58
3.2NIO源碼初探.63
3.3反應堆.69
3.4Netty與NIO.70
3.4.1Netty支援的功能與特性.70
3.4.2Netty採用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.1RPC概述.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.6Monitor監控.101
5.4運行效果演示.102
第3篇Netty核心篇
第6章Netty高性能之道.104
6.1背景介紹.104
6.1.1Netty驚人的性能資料.104
6.1.2傳統RPC調用性能差的“三宗罪”.104
6.1.3Netty高性能的三個主題.105
6.2Netty高性能之核心法寶.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.1Channel簡介.124
7.1.2NioSocketChannel的創建.125
7.1.3用戶端Channel的初始化.127
7.1.4Unsafe屬性的初始化.130
7.1.5ChannelPipeline的初始化.131
7.1.6EventLoop的初始化.132
7.1.7將Channel註冊到Selector.137
7.1.8Handler的添加過程.139
7.1.9用戶端發起連接請求.141
7.2服務端ServerBootstrap.144
7.2.1NioServerSocketChannel的創建.146
7.2.2服務端Channel的初始化.146
7.2.3服務端ChannelPipeline的初始化.149
7.2.4將服務端Channel註冊到Selector.149
7.2.5bossGroup與workerGroup.149
7.2.6服務端Selector事件輪詢.152
7.2.7Netty解決JDK空輪詢Bug.154
7.2.8Netty對Selector中KeySet的優化.157
7.2.9Handler的添加過程.160
第8章大名鼎鼎的EventLoop.164
8.1EventLoopGroup與Reactor.164
8.1.1再談Reactor執行緒模型.164
8.1.2EventLoopGroup與Reactor關聯.166
8.1.3EventLoopGroup的產生實體.167
8.2任務執行者EventLoop.169
8.2.1NioEventLoop的產生實體過程.170
8.2.2EventLoop與Channel的關聯.171
8.2.3EventLoop的啟動.172
第9章Netty大動脈Pipeline.176
9.1Pipeline設計原理.176
9.1.1Channel與ChannelPipeline.176
9.1.2再談ChannelPipeline的初始化.177
9.1.3ChannelInitializer的添加.178
9.1.4自訂ChannelHandler的添加過程.181
9.1.5給ChannelHandler命名.184
9.1.6ChannelHandler的預設命名規則.185
9.2Pipeline的事件傳播機制.186
9.2.1Outbound事件傳播方式.194
9.2.2Inbound事件傳播方式.196
9.2.3小結.199
9.3Handler的各種“姿勢”.200
9.3.1ChannelHandlerContext.200
9.3.2Channel的生命週期.201
9.3.3ChannelHandler常用的API.201
9.3.4ChannelInboundHandler.202
第10章非同步處理雙子星Future與Promise.204
10.1非同步結果Future.204
10.2非同步執行Promise.205
第11章Netty記憶體分配ByteBuf.209
11.1初識ByteBuf.209
11.1.1ByteBuf的基本結構.209
11.1.2ByteBuf的重要API.210
11.1.3ByteBuf的基本分類.213
11.2ByteBufAllocator記憶體管理器.214
11.3非池化記憶體分配.218
11.3.1堆內記憶體的分配.218
11.3.2堆外記憶體的分配.221
11.4池化記憶體分配.224
11.4.1PooledByteBufAllocator簡述.224
11.4.2DirectArena記憶體分配流程.229
11.4.3記憶體池的記憶體規格.231
11.4.4命中緩存的分配.231
11.4.5Page級別的記憶體分配.241
11.4.6SubPage級別的記憶體分配.254
11.4.7記憶體池ByteBuf的記憶體回收.268
11.4.8SocketChannel讀取ByteBuf的過程.273
第12章Netty編解碼的藝術.281
12.1什麼是拆包、粘包.281
12.1.1TCP拆包、粘包.281
12.1.2粘包問題的解決策略.282
12.2什麼是編解碼.282
12.2.1編解碼技術.282
12.2.2Netty為什麼要提供編解碼框架.283
12.3Netty中常用的解碼器.284
12.3.1ByteToMessageDecoder抽象解碼器.284
12.3.2LineBasedFrameDecoder行解碼器.289
12.3.3DelimiterBasedFrameDecoder分隔符號號號號解碼器.296
12.3.4FixedLengthFrameDecoder固定長度解碼器.302
12.3.5LengthFieldBasedFrameDecoder通用解碼器.303
12.4Netty編碼器原理和資料輸出.307
12.4.1WriteAndFlush事件傳播.307
12.4.2MessageToByteEncoder抽象編碼器.311
12.4.3寫入Buffer佇列.312
12.4.4刷新Buffer佇列.316
12.4.5資料輸出回檔.322
12.5自訂編解碼.335
12.5.1MessageToMessageDecoder抽象解碼器.335
12.5.2MessageToMessageEncoder抽象編碼器.336
12.5.3ObjectEncoder序列化編碼器.337
12.5.4LengthFieldPrepender通用編碼器.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.1Web頁面設計.363
13.5.2WebSocket接入.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.1FastThreadLocal的使用和創建.371
14.1.2FastThreadLocal的設值.379
14.2Recycler對象回收站.381
14.2.1Recycler的使用和創建.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.3Netty應用級別的性能調優.413
15.3.1Netty應用級別的性能瓶頸複現.413
15.3.2Netty應用級別的性能調優方案.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.1TCP和UDP的根本區別.432
17.1.2TCP如何保證可靠傳輸.433
17.1.3Netty能解決什麼問題.433
17.1.4選用Netty作為通信元件框架的舉例.433
17.1.5Netty有哪些主要元件,它們之間有什麼關聯.433
17.2不錯特性部分.434
17.2.1相較同類框架,Netty有哪些優勢.434
17.2.2Netty的高性能體現在哪些方面.434
17.2.3預設情況下Netty起多少執行緒,何時啟動.434
17.2.4Netty有幾種發送消息的方式.434
17.2.5Netty支援哪些心跳類型設置.435
17.2.6Netty和Tomcat的區別.435
17.2.7在實際應用中,如何確定要使用哪些轉碼器.435
網路書店
類別
折扣
價格
-
新書87折$564