日本免费精品视频,男人的天堂在线免费视频,成人久久久精品乱码一区二区三区,高清成人爽a毛片免费网站

在線客服
Netty指南(第2版)圖書
人氣:132

Netty指南(第2版)

深入剖析Netty著作升級(jí)版,更系統(tǒng)講解底層架構(gòu)、實(shí)踐與源碼,更清晰地理解Netty 架構(gòu)設(shè)計(jì)理念,Java工程師必讀;新增MessagePack 編解碼、服務(wù)端創(chuàng)建、客戶端創(chuàng)建、高性能之道

編輯推薦

1、Hadoop、Storm、Spark、Facebook、Twitter、Ali baba都在使用Java高性能NIO通信框架Netty,本書告訴你Why,通過(guò)本書你可以、系統(tǒng)地理解Netty 架構(gòu)設(shè)計(jì)理念,以及異步NIO 編程。1、Hadoop、Storm、Spark、Facebook、Twitter、Ali baba都在使用Java高性能NIO通信框架Netty,本書告訴你Why,通過(guò)本書你可以、系統(tǒng)地理解Netty 架構(gòu)設(shè)計(jì)理念,以及異步NIO 編程。

2、本書作者為博學(xué)一線專家,在產(chǎn)品中廣泛應(yīng)用了Netty等NIO框架,具有豐富的多年實(shí)踐經(jīng)驗(yàn),這就使得本書內(nèi)容帶有很強(qiáng)的實(shí)踐性,讓你更快速掌握J(rèn)ava高并發(fā)異步通信的優(yōu)先選擇 框架——Netty的用法。

3、本書第1版出版后受到業(yè)界的一致好評(píng),應(yīng)讀者的要求,第2版增加了MessagePack 編解碼、服務(wù)端創(chuàng)建、客戶端創(chuàng)建、高性能之道、性、安全性等內(nèi)容,內(nèi)容更精彩。

Netty是什么?使用Netty能夠做什么?為什么要從傳統(tǒng)的Socket開(kāi)發(fā)切換到NIO進(jìn)行編程?為什么不直接基于JDK的NIO類庫(kù)編程而選擇Netty?如何系統(tǒng)地掌握Netty進(jìn)行NettyNIO開(kāi)發(fā)、Netty編解碼開(kāi)發(fā)、Netty多協(xié)議開(kāi)發(fā)?如何通過(guò)對(duì)Netty源碼的學(xué)習(xí)獲得更深入地知識(shí)?掌握了Netty后,如何將其應(yīng)用到實(shí)際架構(gòu)中?Netty工程師的就業(yè)前景和可涉足的行業(yè)是怎樣的?本書都會(huì)一一解答。

推薦購(gòu)買:

《云計(jì)算網(wǎng)絡(luò)珠璣》

作者簡(jiǎn)介

李林鋒:Netty中國(guó)推廣者,現(xiàn)華為技術(shù)有限公司平臺(tái)中間件架構(gòu)與設(shè)計(jì)部設(shè)計(jì)師,公司總裁技術(shù)創(chuàng)新獎(jiǎng)獲得者。長(zhǎng)期從事高性能通信軟件的架構(gòu)設(shè)計(jì)和開(kāi)發(fā)工作,有多年在NIO領(lǐng)域的設(shè)計(jì)、開(kāi)發(fā)和運(yùn)維經(jīng)驗(yàn),精通NIO編程和Netty、Mina等主流NIO框架。目前負(fù)責(zé)華為軟件公司下一代SOA中間件和PaaS平臺(tái)的架構(gòu)設(shè)計(jì)工作。

目錄

基礎(chǔ)篇走進(jìn)Java NIO

第1 章Java 的I/O 演進(jìn)之路.2

1.1 I/O 基礎(chǔ)入門...............3

1.1.1 Linux 網(wǎng)絡(luò)I/O 模型簡(jiǎn)介.......3

1.1.2 I/O 多路復(fù)用技術(shù).................6

1.2 Java 的I/O 演進(jìn)..........8

1.3 總結(jié)............................ 10

第2 章NIO 入門.................... 11

2.1 傳統(tǒng)的BIO 編程....... 11

2.1.1 BIO 通信模型圖.................. 12

2.1.2 同步阻塞式I/O 創(chuàng)建的TimeServer 源碼分析............. 13

2.1.3 同步阻塞式I/O 創(chuàng)建的TimeClient 源碼分析.......... 16

2.2 偽異步I/O 編程........ 18

2.2.1 偽異步I/O 模型圖.............. 19

2.2.2 偽異步I/O 創(chuàng)建的TimeServer 源碼分析..... 19

2.2.3 偽異步I/O 弊端分析........... 21

2.3 NIO 編程.................... 24

2.3.1 NIO 類庫(kù)簡(jiǎn)介.. 24

2.3.2 NIO 服務(wù)端序列圖.............. 28

2.3.3 NIO 創(chuàng)建的TimeServer 源碼分析................ 30

2.3.4 NIO 客戶端序列圖.............. 36

2.3.5 NIO 創(chuàng)建的TimeClient 源碼分析................ 39

2.4 AIO 編程.................... 45

2.4.1 AIO 創(chuàng)建的TimeServer 源碼分析................ 46

2.4.2 AIO 創(chuàng)建的TimeClient 源碼分析................ 51

2.4.3 AIO 版本時(shí)間服務(wù)器運(yùn)行結(jié)果.................... 56

2.5 4 種I/O 的對(duì)比......... 58

2.5.1 概念澄清.......... 58

2.5.2 不同I/O 模型對(duì)比.............. 59

2.6 選擇Netty 的理由..... 60

2.6.1 不選擇Java 原生NIO 編程的原因............... 61

2.6.2 為什么選擇Netty ................ 62

2.7 總結(jié)............................ 63

入門篇 Netty NIO 開(kāi)發(fā)指南

第3 章Netty 入門應(yīng)用.......... 66

3.1 Netty 開(kāi)發(fā)環(huán)境的搭建................ 66

3.1.1 下載Netty 的軟件包........... 67

3.1.2 搭建Netty 應(yīng)用工程........... 67

3.2 Netty 服務(wù)端開(kāi)發(fā)...... 68

3.3 Netty 客戶端開(kāi)發(fā)...... 73

3.4 運(yùn)行和調(diào)試................ 76

3.4.1 服務(wù)端和客戶端的運(yùn)行...... 76

3.4.2 打包和部署...... 77

3.5 總結(jié)............................ 77

第4 章TCP 粘包/拆包問(wèn)題的解決之道...... 79

4.1 TCP 粘包/拆包.......... 79

4.1.1 TCP 粘包/拆包問(wèn)題說(shuō)明..... 80

4.1.2 TCP 粘包/拆包發(fā)生的原因....... 80

4.1.3 粘包問(wèn)題的解決策略.......... 81

4.2 未考慮TCP 粘包導(dǎo)致功能異常案例................. 82

4.2.1 TimeServer 的改造.............. 82

4.2.2 TimeClient 的改造............... 83

4.2.3 運(yùn)行結(jié)果.......... 84

4.3 利用LineBasedFrameDecoder 解決TCP 粘包問(wèn)題................ 85

4.3.1 支持TCP 粘包的TimeServer ....................... 86

4.3.2 支持TCP 粘包的TimeClient........................ 88

4.3.3 運(yùn)行支持TCP 粘包的時(shí)間服務(wù)器程序........ 90

4.3.4 LineBasedFrameDecoder 和StringDecoder 的原理分析........... 91

4.4 總結(jié)............................ 92

第5 章分隔符和定長(zhǎng)解碼器的應(yīng)用...... 93

5.1 DelimiterBasedFrameDecoder 應(yīng)用開(kāi)發(fā)............. 94

5.1.1 DelimiterBasedFrameDecoder 服務(wù)端開(kāi)發(fā).... 94

5.1.2 DelimiterBasedFrameDecoder 客戶端開(kāi)發(fā).... 97

5.1.3 運(yùn)行DelimiterBasedFrameDecoder 服務(wù)端和客戶端............... 99

5.2 FixedLengthFrameDecoder 應(yīng)用開(kāi)發(fā)............... 101

5.2.1 FixedLengthFrameDecoder 服務(wù)端開(kāi)發(fā)...... 101

5.2.2 利用telnet 命令行測(cè)試EchoServer 服務(wù)端......103

5.3 總結(jié).......................... 104

中級(jí)篇 Netty 編解碼開(kāi)發(fā)指南

第6 章編解碼技術(shù).............. 106

6.1 Java 序列化的缺點(diǎn) ...... 107

6.1.1 無(wú)法跨語(yǔ)言.... 107

6.1.2 序列化后的碼流太大........ 107

6.1.3 序列化性能太低................ 110

6.2 業(yè)界主流的編解碼框架............ 113

6.2.1 Google 的Protobuf 介紹.... 113

6.2.2 Facebook 的Thrift 介紹.... 115

6.2.3 JBoss Marshalling 介紹..... 116

6.3 總結(jié).......................... 117

第7 章MessagePack 編解碼............... 118

7.1 MessagePack 介紹... 118

7.1.1 MessagePack 多語(yǔ)言支持.. 119

7.1.2 MessagePack Java API 介紹........................ 119

7.1.3 MessagePack 開(kāi)發(fā)包下載. 120

7.2 MessagePack 編碼器和解碼器開(kāi)發(fā)................. 120

7.2.1 MessagePack 編碼器開(kāi)發(fā)....... 120

7.2.2 MessagePack 解碼器開(kāi)發(fā) ...... 121

7.2.3 功能測(cè)試........ 121

7.3 粘包/半包支持......... 124

7.4 總結(jié).......................... 127

第8 章Google Protobuf 編解碼.......... 128

8.1 Protobuf 的入門....... 129

8.1.1 Protobuf 開(kāi)發(fā)環(huán)境搭建..... 129

8.1.2 Protobuf 編解碼開(kāi)發(fā)......... 131

8.1.3 運(yùn)行Protobuf 例程............ 133

8.2 Netty 的Protobuf 服務(wù)端開(kāi)發(fā).. 133

8.2.1 Protobuf 版本的圖書訂購(gòu)服務(wù)端開(kāi)發(fā)........ 134

8.2.2 Protobuf 版本的圖書訂購(gòu)客戶端開(kāi)發(fā)........ 136

8.2.3 Protobuf 版本的圖書訂購(gòu)程序功能測(cè)試.... 139

8.3 Protobuf 的使用注意事項(xiàng)......... 140

8.4 總結(jié).......................... 142

第9 章JBoss Marshalling 編解碼....... 143

9.1 Marshalling 開(kāi)發(fā)環(huán)境準(zhǔn)備........ 143

9.2 Netty 的Marshalling 服務(wù)端開(kāi)發(fā)..................... 144

9.3 Netty 的Marshalling 客戶端開(kāi)發(fā)..................... 147

9.4 運(yùn)行Marshalling 客戶端和服務(wù)端例程........... 149

9.5 總結(jié).......................... 150

高級(jí)篇 Netty 多協(xié)議開(kāi)發(fā)和應(yīng)用

第10 章HTTP 協(xié)議開(kāi)發(fā)應(yīng)用............... 154

10.1 HTTP 協(xié)議介紹..... 155

10.1.1 HTTP 協(xié)議的URL .......... 155

10.1.2 HTTP 請(qǐng)求消息(HttpRequest).............. 155

10.1.3 HTTP 響應(yīng)消息(HttpResponse)........... 158

10.2 Netty HTTP 服務(wù)端入門開(kāi)發(fā)....... 159

10.2.1 HTTP 服務(wù)端例程場(chǎng)景描述..................... 160

10.2.2 HTTP 服務(wù)端開(kāi)發(fā)........... 160

10.2.3 Netty HTTP 文件服務(wù)器例程運(yùn)行結(jié)果.... 166

10.3 Netty HTTP XML 協(xié)議棧開(kāi)發(fā)....................... 170

10.3.1 開(kāi)發(fā)場(chǎng)景介紹................. 171

10.3.2 HTTP XML 協(xié)議棧設(shè)計(jì).......174

10.3.3 高效的XML 綁定框架JiBx ..................... 175

10.3.4 HTTP XML 編解碼框架開(kāi)發(fā).................. 183

10.3.5 HTTP XML 協(xié)議棧測(cè)試....... 199

10.3.6 小結(jié)............. 201

10.4 總結(jié)........................ 202

第11 章WebSocket 協(xié)議開(kāi)發(fā)............. 203

11.1 HTTP 協(xié)議的弊端....... 204

11.2 WebSocket 入門..... 204

11.2.1 WebSocket 背景............... 205

11.2.2 WebSocket 連接建立....... 206

11.2.3 WebSocket 生命周期....... 207

11.2.4 WebSocket 連接關(guān)閉....... 208

11.3 Netty WebSocket 協(xié)議開(kāi)發(fā)..... 209

11.3.1 WebSocket 服務(wù)端功能介紹..................... 209

11.3.2 WebSocket 服務(wù)端開(kāi)發(fā).... 210

11.3.3 運(yùn)行WebSocket 服務(wù)端... 218

11.4 總結(jié)........................ 219

第12 章私有協(xié)議棧開(kāi)發(fā).... 221

12.1 私有協(xié)議介紹........ 221

12.2 Netty 協(xié)議棧功能設(shè)計(jì)............ 223

12.2.1 網(wǎng)絡(luò)拓?fù)鋱D.. 223

12.2.2 協(xié)議棧功能描述.............. 224

12.2.3 通信模型...... 224

12.2.4 消息定義...... 225

12.2.5 Netty 協(xié)議支持的字段類型...................... 226

12.2.6 Netty 協(xié)議的編解碼規(guī)范. 227

12.2.7 鏈路的建立.. 229

12.2.8 鏈路的關(guān)閉.. 230

12.2.9 性設(shè)計(jì).. 230

12.2.10 安全性設(shè)計(jì) 232

12.2.11 可擴(kuò)展性設(shè)計(jì)................ 232

12.3 Netty 協(xié)議棧開(kāi)發(fā).. 233

12.3.1 數(shù)據(jù)結(jié)構(gòu)定義................. 233

12.3.2 消息編解碼.. 237

12.3.3 握手和安全認(rèn)證.............. 241

12.3.4 心跳檢測(cè)機(jī)制................. 245

12.3.5 斷連重連...... 248

12.3.6 客戶端代碼.. 249

12.3.7 服務(wù)端代碼.. 251

12.4 運(yùn)行協(xié)議棧............ 252

12.4.1 正常場(chǎng)景...... 252

12.4.2 異常場(chǎng)景:服務(wù)端宕機(jī)重啟.................... 253

12.4.3 異常場(chǎng)景:客戶端宕機(jī)重啟.................... 256

12.5 總結(jié)........................ 256

第13 章服務(wù)端創(chuàng)建............ 258

13.1 原生NIO 類庫(kù)的復(fù)雜性......... 259

13.2 Netty 服務(wù)端創(chuàng)建源碼分析.... 259

13.2.1 Netty 服務(wù)端創(chuàng)建時(shí)序圖. 260

13.2.2 Netty 服務(wù)端創(chuàng)建源碼分析...................... 263

13.3 客戶端接入源碼分析.............. 272

13.4 總結(jié)........................ 275

第14 章客戶端創(chuàng)建............ 276

14.1 Netty 客戶端創(chuàng)建流程分析.... 276

14.2.1 Netty 客戶端創(chuàng)建時(shí)序圖. 276

14.2.2 Netty 客戶端創(chuàng)建流程分析...................... 277

14.2 Netty 客戶端創(chuàng)建源碼分析.... 278

14.2.1 客戶端連接輔助類Bootstrap.................... 278

14.2.2 客戶端連接操作.............. 281

14.2.3 異步連接結(jié)果通知.......... 283

14.2.4 客戶端連接超時(shí)機(jī)制...... 284

14.3 總結(jié)........................ 286

源碼分析篇 Netty 功能介紹和源碼分析

第15 章ByteBuf 和相關(guān)輔助類........... 288

15.1 ByteBuf 功能說(shuō)明. 288

15.1.1 ByteBuf 的工作原理........ 289

15.1.2 ByteBuf 的功能介紹........ 294

15.2 ByteBuf 源碼分析. 308

15.2.1 ByteBuf 的主要類繼承關(guān)系..................... 309

15.2.2 AbstractByteBuf 源碼分析........................ 310

15.2.3 AbstractReferenceCountedByteBuf 源碼分析.................. 319

15.2.4 UnpooledHeapByteBuf 源碼分析.............. 321

15.2.5 PooledByteBuf 內(nèi)存池原理分析............... 326

15.2.6 PooledDirectByteBuf 源碼分析................. 329

15.3 ByteBuf 相關(guān)的輔助類功能介紹.................... 332

15.3.1 ByteBufHolder................. 332

15.3.2 ByteBufAllocator ............. 333

15.3.3 CompositeByteBuf ........... 334

15.3.4 ByteBufUtil .. 336

15.4 總結(jié)........................ 337

第16 章Channel 和Unsafe ................. 338

16.1 Channel 功能說(shuō)明. 338

16.1.1 Channel 的工作原理........ 339

16.1.2 Channel 的功能介紹........ 340

16.2 Channel 源碼分析. 343

16.2.1 Channel 的主要繼承關(guān)系類圖.................. 343

16.2.2 AbstractChannel 源碼分析........................ 344

16.2.3 AbstractNioChannel 源碼分析.................. 347

16.2.4 AbstractNioByteChannel 源碼分析........... 350

16.2.5 AbstractNioMessageChannel 源碼分析..... 353

16.2.6 AbstractNioMessageServerChannel 源碼分析.............. 354

16.2.7 NioServerSocketChannel 源碼分析........... 355

16.2.8 NioSocketChannel 源碼分析..................... 358

16.3 Unsafe 功能說(shuō)明... 364

16.4 Unsafe 源碼分析... 365

16.4.1 Unsafe 繼承關(guān)系類圖...... 365

16.4.2 AbstractUnsafe 源碼分析. 366

16.4.3 AbstractNioUnsafe 源碼分析.................... 375

16.4.4 NioByteUnsafe 源碼分析. 379

16.5 總結(jié)........................ 387

第17 章ChannelPipeline 和ChannelHandler........... 388

17.1 ChannelPipeline 功能說(shuō)明....... 389

17.1.1 ChannelPipeline 的事件處理.................... 389

17.1.2 自定義攔截器................. 391

17.1.3 構(gòu)建pipeline 392

17.1.4 ChannelPipeline 的主要特性.................... 393

17.2 ChannelPipeline 源碼分析....... 393

17.2.1 ChannelPipeline 的類繼承關(guān)系圖............. 393

17.2.2 ChannelPipeline 對(duì)ChannelHandler 的管理........... 393

17.2.3 ChannelPipeline 的inbound 事件.............. 396

17.2.4 ChannelPipeline 的outbound 事件............ 397

17.3 ChannelHandler 功能說(shuō)明....... 398

17.3.1 ChannelHandlerAdapter 功能說(shuō)明............ 399

17.3.2 ByteToMessageDecoder 功能說(shuō)明............ 399

17.3.3 MessageToMessageDecoder 功能說(shuō)明...... 400

17.3.4 LengthFieldBasedFrameDecoder 功能說(shuō)明............... 400

17.3.5 MessageToByteEncoder 功能說(shuō)明............. 404

17.3.6 MessageToMess

在線預(yù)覽

13.2.1Netty服務(wù)端創(chuàng)建時(shí)序圖

下面我們對(duì)Netty服務(wù)端創(chuàng)建的關(guān)鍵步驟和原理進(jìn)行講解。

步驟1:創(chuàng)建ServerBootstrap實(shí)例。ServerBootstrap是Netty服務(wù)端的啟動(dòng)輔助類,它提供了一系列的方法用于設(shè)置服務(wù)端啟動(dòng)相關(guān)的參數(shù)。底層通過(guò)門面模式對(duì)各種能力進(jìn)行抽象和封裝,盡量不需要用戶跟過(guò)多的底層API打交道,降低用戶的開(kāi)發(fā)難度。

我們?cè)趧?chuàng)建ServerBootstrap實(shí)例時(shí),會(huì)驚訝地發(fā)現(xiàn)ServerBootstrap只有一個(gè)無(wú)參的構(gòu)造函數(shù),作為啟動(dòng)輔助類這讓人不可思議,因?yàn)樗枰c多個(gè)其他組件或者類交互。ServerBootstrap構(gòu)造函數(shù)沒(méi)有參數(shù)的根本原因是因?yàn)樗膮?shù)太多了,而且未來(lái)也可能會(huì)發(fā)生變化,為了解決這個(gè)問(wèn)題,就需要引入Builder模式。《Effective Java》第二版第2條建議遇到多個(gè)構(gòu)造器參數(shù)時(shí)要考慮用構(gòu)建器,關(guān)于多個(gè)參數(shù)構(gòu)造函數(shù)的缺點(diǎn)和使用構(gòu)建器的優(yōu)點(diǎn)大家可以查閱《Effective Java》,在此不再詳述。

步驟2:設(shè)置并綁定Reactor線程池。Netty的Reactor線程池是EventLoopGroup,它實(shí)際就是EventLoop的數(shù)組。EventLoop的職責(zé)是處理所有注冊(cè)到本線程多路復(fù)用器Selector上的Channel,Selector的輪詢操作由綁定的EventLoop線程run方法驅(qū)動(dòng),在一個(gè)循環(huán)體內(nèi)循環(huán)執(zhí)行。值得說(shuō)明的是,EventLoop的職責(zé)不僅僅是處理網(wǎng)絡(luò)I/O事件,用戶自定義的Task和定時(shí)任務(wù)Task也統(tǒng)一由EventLoop負(fù)責(zé)處理,這樣線程模型就實(shí)現(xiàn)了統(tǒng)一。從調(diào)度層面看,也不存在在EventLoop線程中再啟動(dòng)其他類型的線程用于異步執(zhí)行另外的任務(wù),這樣就避免了多線程并發(fā)操作和鎖競(jìng)爭(zhēng),提升了I/O線程的處理和調(diào)度性能。

步驟3:設(shè)置并綁定服務(wù)端Channel。作為NIO服務(wù)端,需要?jiǎng)?chuàng)建ServerSocketChannel,Netty對(duì)原生的NIO類庫(kù)進(jìn)行了封裝,對(duì)應(yīng)實(shí)現(xiàn)是NioServerSocketChannel。對(duì)于用戶而言,不需要關(guān)心服務(wù)端Channel的底層實(shí)現(xiàn)細(xì)節(jié)和工作原理,只需要指定具體使用哪種服務(wù)端Channel即可。因此,Netty的ServerBootstrap方法提供了channel方法用于指定服務(wù)端Channel的類型。Netty通過(guò)工廠類,利用反射創(chuàng)建NioServerSocketChannel對(duì)象。由于服務(wù)端監(jiān)聽(tīng)端口往往只需要在系統(tǒng)啟動(dòng)時(shí)才會(huì)調(diào)用,因此反射對(duì)性能的影響并不大。相關(guān)代碼如下。

public ServerBootstrap channel(Class channelClass) {

if (channelClass == null) {

throw new NullPointerException("channelClass");

}

return channelFactory(new ServerBootstrapChannelFactory(channelClass));

}

步驟4:鏈路建立的時(shí)候創(chuàng)建并初始化ChannelPipeline。ChannelPipeline并不是NIO服務(wù)端必需的,它本質(zhì)就是一個(gè)負(fù)責(zé)處理網(wǎng)絡(luò)事件的職責(zé)鏈,負(fù)責(zé)管理和執(zhí)行ChannelHandler。網(wǎng)絡(luò)事件以事件流的形式在ChannelPipeline中流轉(zhuǎn),由ChannelPipeline根據(jù)ChannelHandler的執(zhí)行策略調(diào)度ChannelHandler的執(zhí)行。典型的網(wǎng)絡(luò)事件如下。

(1)鏈路注冊(cè);

(2)鏈路激活;

(3)鏈路斷開(kāi);

(4)接收到請(qǐng)求消息;

(5)請(qǐng)求消息接收并處理完畢;

(6)發(fā)送應(yīng)答消息;

(7)鏈路發(fā)生異常;

(8)發(fā)生用戶自定義事件。

步驟5:初始化ChannelPipeline完成之后,添加并設(shè)置ChannelHandler。ChannelHandler是Netty提供給用戶定制和擴(kuò)展的關(guān)鍵接口。利用ChannelHandler用戶可以完成大多數(shù)的功能定制,例如消息編解碼、心跳、安全認(rèn)證、TSL/SSL認(rèn)證、流量控制和流量整形等。Netty同時(shí)也提供了大量的系統(tǒng)ChannelHandler供用戶使用,比較實(shí)用的系統(tǒng)ChannelHandler總結(jié)如下。

(1)系統(tǒng)編解碼框架——ByteToMessageCodec;

(2)通用基于長(zhǎng)度的半包解碼器——LengthFieldBasedFrameDecoder;

(3)碼流日志打印Handler——LoggingHandler;

(4)SSL安全認(rèn)證Handler——SslHandler;

(5)鏈路空閑檢測(cè)Handler——IdleStateHandler;

(6)流量整形Handler——ChannelTrafficShapingHandler;

(7)Base64編解碼——Base64Decoder和Base64Encoder。

創(chuàng)建和添加ChannelHandler的代碼示例如下。

.childHandler(new ChannelInitializer() {

@Override

public void initChannel(SocketChannel ch

throws Exception {

ch.pipeline().addLast

new EchoServerHandler());

}

});

步驟6:綁定并啟動(dòng)監(jiān)聽(tīng)端口。在綁定監(jiān)聽(tīng)端口之前系統(tǒng)會(huì)做一系列的初始化和檢測(cè)工作,完成之后,會(huì)啟動(dòng)監(jiān)聽(tīng)端口,并將ServerSocketChannel注冊(cè)到Selector上監(jiān)聽(tīng)客戶端連接,相關(guān)代碼如下。

protected void doBind(SocketAddress localAddress) throws Exception {

javaChannel().socket().bind(localAddress, config.getBacklog());

}

步驟7:Selector輪詢。由Reactor線程N(yùn)ioEventLoop負(fù)責(zé)調(diào)度和執(zhí)行Selector輪詢操作,選擇準(zhǔn)備就緒的Channel集合,相關(guān)代碼如下。

private void select() throws IOException {

Selector selector = this.selector;

try {

//此處代碼省略......

int selectedKeys = selector.select(timeoutMillis);

selectCnt ;

//此處代碼省略......

}

步驟8:當(dāng)輪詢到準(zhǔn)備就緒的Channel之后,就由Reactor線程N(yùn)ioEventLoop執(zhí)行ChannelPipeline的相應(yīng)方法,最終調(diào)度并執(zhí)行ChannelHandler,接口如圖13-2所示。

步驟9:執(zhí)行Netty系統(tǒng)ChannelHandler和用戶添加定制的ChannelHandler。ChannelPipeline根據(jù)網(wǎng)絡(luò)事件的類型,調(diào)度并執(zhí)行ChannelHandler,相關(guān)代碼如下。

public ChannelHandlerContext fireChannelRead(Object msg) {

DefaultChannelHandlerContext next = findContextInbound(MASK_CHANNEL_READ);

next.invoker.invokeChannelRead(next, msg);

return this;

}

媒體評(píng)論

林鋒讓我給這本新書寫個(gè)推薦,不勝榮幸。我和林鋒接觸時(shí)間不長(zhǎng),已經(jīng)感受到了他對(duì)技術(shù)的熱愛(ài)和不盡探索。這種熱愛(ài)來(lái)自于內(nèi)心的驅(qū)動(dòng),不摻雜任何雜質(zhì),我認(rèn)為他是我見(jiàn)到的為數(shù)不多的技術(shù)熱愛(ài)者。也正是因?yàn)檫@種熱愛(ài),促使林鋒花費(fèi)了很多業(yè)余時(shí)間,完成了這樣一本對(duì)Netty的編程指南。相信讀者在閱讀此書時(shí),在感嘆內(nèi)容之豐富詳實(shí)的同時(shí),也會(huì)深深感受到林鋒對(duì)所著技術(shù)的熱愛(ài)。我想這就是我們通過(guò)書中文字相遇的初衷吧。當(dāng)我們的技術(shù)能夠日益精進(jìn),達(dá)到專業(yè)的水準(zhǔn),生產(chǎn)力會(huì)成倍甚至指數(shù)級(jí)地增長(zhǎng)。希望讀者能夠通過(guò)閱讀此書獲取這種精進(jìn)的力量。

——IBM中國(guó)開(kāi)發(fā)實(shí)驗(yàn)室開(kāi)發(fā)總監(jiān) 黃省江

Netty的之處在于它是一個(gè)高性能、異步事件驅(qū)動(dòng)的NIO框架,目前很多著名的開(kāi)源框架開(kāi)始將底層的通信框架切換到Netty,如Hadoop、Storm等,F(xiàn)acebook的后臺(tái)也即將啟用這一框架。希望這本書的面市能夠?qū)etty在國(guó)內(nèi)的發(fā)展起到推動(dòng)作用。

——Facebook博學(xué)工程師 覃超

中國(guó)的閱讀類應(yīng)用——中國(guó)移動(dòng)手機(jī)閱讀基地,每天承受著5~7.5億PV的訪問(wèn)量,為了實(shí)現(xiàn)業(yè)務(wù)的彈性,華為Digital SDP產(chǎn)品承接了對(duì)其后臺(tái)進(jìn)行微服務(wù)重構(gòu)的工作,一個(gè)PV背后的后臺(tái)原子接口訪問(wèn)達(dá)到幾十乃至上百次,還要保障90%的頁(yè)面訪問(wèn)在500ms內(nèi)響應(yīng),在這樣的壓力下,高效的通信機(jī)制尤其重要,林鋒基于Netty構(gòu)建的對(duì)等通信虛擬總線很好地承載了這一需求。平均通信時(shí)延0.71ms,80%以上的通信時(shí)延都保持在1ms以下,其余通信時(shí)延都低于3ms,在響應(yīng)速度這一重要指標(biāo)上不僅滿足了客戶的要求,而且還帶來(lái)了系統(tǒng)可伸縮性和彈性上的巨大提升,林鋒在本書中闡釋的Netty應(yīng)用上的經(jīng)驗(yàn)和技巧值得期待。

——華為Digital SDP首席架構(gòu)師 王慷

最近幾年,Netty社區(qū)的發(fā)展如火如荼,無(wú)論是大數(shù)據(jù)領(lǐng)域的演進(jìn),還是微服務(wù)架構(gòu)的流行,都需要高效的分布式通信機(jī)制作為基本支撐,Netty憑借優(yōu)異的性能、靈活的擴(kuò)展性得到了廣泛的應(yīng)用。林鋒兄曾將自己在NIO領(lǐng)域的積累以博文的形式共享,得到了Java社區(qū)的熱烈響應(yīng),他對(duì)NIO領(lǐng)域的積累和見(jiàn)解令人敬佩。本次升級(jí)更新后的第2版,相信會(huì)有更多新鮮和實(shí)用的知識(shí)增加進(jìn)來(lái),毫無(wú)疑問(wèn),它會(huì)成為學(xué)習(xí)高性能NIO的必備圖書。

——IT圖書譯者、InfoQ編輯 張衛(wèi)濱

設(shè)計(jì)開(kāi)發(fā)基于異步編程模型的高性能服務(wù)器,除了理解和熟練應(yīng)用NIO等這些Java層面的基礎(chǔ)知識(shí)之外,能夠駕馭的異步通信框架也是非常重要的,Netty無(wú)疑是Java領(lǐng)域最值得學(xué)習(xí)和研究的異步事件驅(qū)動(dòng)的NIO框架。作者有著多年的NIO開(kāi)發(fā)和運(yùn)維經(jīng)驗(yàn),本書濃縮了作者多年實(shí)戰(zhàn)經(jīng)驗(yàn),推薦給對(duì)Netty技術(shù)感興趣、想研究的攻城獅閱讀!

——螞蟻金服基礎(chǔ)技術(shù)部JVM Architect 李三紅

Netty是一個(gè)令人驚訝的項(xiàng)目,在短短幾年內(nèi)成為眾多Java高并發(fā)異步通信的框架。但目前國(guó)內(nèi)資料極少并缺乏系統(tǒng)性,而李兄的這本系統(tǒng)介紹Netty開(kāi)發(fā)和原理的書籍,很地填補(bǔ)了這個(gè)空白。國(guó)內(nèi)的技術(shù)人員對(duì)Java NIO和Netty的理解多一些,也就意味著國(guó)內(nèi)整體網(wǎng)絡(luò)編程技術(shù)的進(jìn)步。本書條理清晰,對(duì)技術(shù)的闡述循序漸進(jìn),是一本難得的Netty學(xué)習(xí)教材,推薦有志青年仔細(xì)學(xué)習(xí)研究本書,共同把NIO異步通信編程推向一個(gè)新高度。

——JBoss應(yīng)用服務(wù)器核心開(kāi)發(fā)組成員 張建鋒

網(wǎng)友評(píng)論(不代表本站觀點(diǎn))

來(lái)自無(wú)昵稱**的評(píng)論:

寫的非常好,比較有深度,感覺(jué)比netty in action 要好,要神

2017-11-24 10:57:47
來(lái)自無(wú)昵稱**的評(píng)論:

真的不錯(cuò)啊

2017-09-15 16:35:53
來(lái)自小羊d**的評(píng)論:

Netty指南(第2版) 萬(wàn)象快遞,當(dāng)當(dāng)自營(yíng)

2017-11-15 19:50:39
來(lái)自無(wú)昵稱**的評(píng)論:

當(dāng)當(dāng)不是以前的當(dāng)當(dāng)了

2017-11-15 21:59:17
來(lái)自七彩葫**的評(píng)論:

價(jià)格相當(dāng)實(shí)惠

2017-11-19 20:09:19
來(lái)自匿名用**的評(píng)論:

也是值得研究的一本書

2017-06-19 10:41:59
來(lái)自匿名用**的評(píng)論:

介紹的很詳細(xì),很有幫助

2017-06-29 00:34:09
來(lái)自匿名用**的評(píng)論:

有折很,包裝也很一般

2017-06-29 20:26:04
來(lái)自匿名用**的評(píng)論:

感覺(jué)書中有很多瑕疵,不夠嚴(yán)謹(jǐn),部分代碼好像還有缺陷?;A(chǔ)不好的建議不要買,因?yàn)橛械拇a會(huì)卡你半天,因?yàn)楦揪幾g通不過(guò)。

2017-07-14 16:59:08
來(lái)自無(wú)昵稱**的評(píng)論:

書沒(méi)什么問(wèn)題,就是快遞員打電話說(shuō)包裹不小心開(kāi)了個(gè)口子,我認(rèn)為是沒(méi)問(wèn)題就行也沒(méi)在意,結(jié)果拿到快遞的時(shí)候發(fā)現(xiàn)開(kāi)口很齊整小核最重要的是發(fā)票沒(méi)有了,不知道是快遞員拿走了還是根本沒(méi)發(fā)

2017-07-15 12:54:10
來(lái)自閆***c(**的評(píng)論:

非常的不錯(cuò)

2017-07-22 11:32:16
來(lái)自匿名用**的評(píng)論:

印刷很好,字跡清晰,是正版,輸?shù)膬?nèi)容講解很完美

2017-08-10 13:47:59
來(lái)自無(wú)昵稱**的評(píng)論:

很好,非常不錯(cuò)!很好,非常不錯(cuò)!

2017-08-14 17:12:41
來(lái)自無(wú)昵稱**的評(píng)論:

很好,非常不錯(cuò)!很好,非常不錯(cuò)!

2017-08-14 17:13:42
來(lái)自無(wú)昵稱**的評(píng)論:

還沒(méi)有看,看完再評(píng)論

2017-08-29 16:13:45
來(lái)自來(lái)自北**的評(píng)論:

不錯(cuò) 正品 值得買

2017-08-31 12:45:50
來(lái)自peacent**的評(píng)論:

品質(zhì)不錯(cuò) 可讀性強(qiáng)

2017-09-08 20:07:28
來(lái)自無(wú)昵稱**的評(píng)論:

Netty指南(第2版) 能夠深入了解,底層原理

2017-09-11 21:44:02
來(lái)自寒***㈦**的評(píng)論:

拿到了,還沒(méi)有開(kāi)始看,用到了再回來(lái)追加

2017-09-13 07:06:23
來(lái)自無(wú)昵稱**的評(píng)論:

部分內(nèi)容有些過(guò)時(shí),但總體不錯(cuò)

2017-09-20 14:44:44
來(lái)自lwx4718**的評(píng)論:

還沒(méi)看,想深入了解NIO的話,就看看這本

2017-10-25 22:01:55
來(lái)自無(wú)昵稱**的評(píng)論:

很詳細(xì),NIO必讀

2017-11-02 10:09:39
來(lái)自yujiabi**的評(píng)論:

好書,好內(nèi)容。在大數(shù)據(jù)時(shí)代尤其對(duì)我有幫助

2017-11-07 13:18:58
來(lái)自宋文淵**的評(píng)論:

看了第一章,及大綱。真的是本不錯(cuò)的書!

2017-11-07 21:28:57
來(lái)自無(wú)昵稱**的評(píng)論:

其他都不錯(cuò),唯一不爽就是沒(méi)有紙箱包裝,書很容易弄皺。。

2016-04-25 11:19:44
來(lái)自無(wú)昵稱**的評(píng)論:

非常好,我喜歡這種看不懂,但是可以放在電腦旁裝逼的書。

2015-11-11 21:31:08
來(lái)自r***g(**的評(píng)論:

拿到書的時(shí)候書就沒(méi)有塑料封皮,紙質(zhì)還行,印刷也還不錯(cuò)

2017-04-25 09:43:18
來(lái)自無(wú)昵稱**的評(píng)論:

非常好的一本書,實(shí)用,java并發(fā)編程的神器!

2016-06-30 09:26:20
來(lái)自匿名用**的評(píng)論:

Netty指南(第2版) 還挺不錯(cuò)的,只是買了過(guò)后遇到讀書節(jié)搞活動(dòng),有點(diǎn)后悔。

2017-04-26 19:24:02
來(lái)自無(wú)昵稱**的評(píng)論:

程序員必看,沒(méi)事買來(lái)拓展下知識(shí),懂得多才值錢!

2017-10-24 21:53:36
來(lái)自kindoms**的評(píng)論:

書的內(nèi)容很好,很實(shí)用。不過(guò),我收到的這本書裝訂上有瑕疵,334頁(yè)的下一頁(yè)不是335,一下了跳到了431。這個(gè)跨越斷篇,我也是無(wú)語(yǔ)了。

2016-12-19 07:05:00
來(lái)自無(wú)昵稱**的評(píng)論:

***TY權(quán)威指南(第2版)***TY權(quán)威指南(第2版)N10ETTY權(quán)威指南(第2版)發(fā)6實(shí)驗(yàn)室開(kāi)發(fā)總監(jiān)黃省江的之處在于它是一個(gè)高性能、異步事件驅(qū)動(dòng)的框架,目前很多著名的開(kāi)源框架開(kāi)始將樣的?本書都會(huì)一一解答。推薦購(gòu)買:《云

2016-06-18 14:50:21

免責(zé)聲明

更多出版社