登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書

『簡體書』Netty权威指南(第2版)

書城自編碼: 2554999
分類:簡體書→大陸圖書→計算機/網絡软件工程/开发项目管理
作者: 李林锋 著
國際書號(ISBN): 9787121258015
出版社: 电子工业出版社
出版日期: 2015-04-01
版次: 2 印次: 1
頁數/字數: 572/
書度/開本: 16开 釘裝: 平装

售價:HK$ 164.7

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
大模型启示录
《 大模型启示录 》

售價:HK$ 112.0
东法西渐:19世纪前西方对中国法的记述与评价
《 东法西渐:19世纪前西方对中国法的记述与评价 》

售價:HK$ 201.6
养育男孩:官方升级版
《 养育男孩:官方升级版 》

售價:HK$ 50.4
小原流花道技法教程
《 小原流花道技法教程 》

售價:HK$ 109.8
少女映像室 唯美人像摄影从入门到实战
《 少女映像室 唯美人像摄影从入门到实战 》

售價:HK$ 110.9
詹姆斯·伍德系列:不负责任的自我:论笑与小说(“美国图书评论奖”入围作品 当代重要文学批评家詹姆斯·伍德对“文学中的笑与喜剧”的精湛研究)
《 詹姆斯·伍德系列:不负责任的自我:论笑与小说(“美国图书评论奖”入围作品 当代重要文学批评家詹姆斯·伍德对“文学中的笑与喜剧”的精湛研究) 》

售價:HK$ 87.4
武当内家散手
《 武当内家散手 》

售價:HK$ 50.4
诛吕:“诸吕之乱”的真相与吕太后时期的权力结构
《 诛吕:“诸吕之乱”的真相与吕太后时期的权力结构 》

售價:HK$ 99.7

 

建議一齊購買:

+

HK$ 90.7
《Spring MVC学习指南》
+

HK$ 90.7
《Redis入门指南(第2版)》
+

HK$ 127.7
《ElasticSearch:可扩展的开源弹性搜索解决方案》
編輯推薦:
1、Hadoop、Storm、Spark、Facebook、Twitter、阿里巴巴都在使用Java高性能NIO通信框架Netty,本书告诉你Why,通过本书你可以全面、系统地理解Netty 架构设计理念,以及异步NIO 编程。

2、本书作者为资深一线专家,在产品中广泛应用了Netty等NIO框架,具有丰富的多年实践经验,这就使得本书内容带有很强的实践性,让你更全面快速掌握Java高并发异步通信的首选框架——Netty的用法。

3、本书第一版出版后受到业界的一致好评,应读者的要求,第2版增加了MessagePack 编解码、服务端创建、客户端创建、高性能之道、可靠性、安全性等内容,内容更精彩。

Netty是什么?使用Netty能够做什么?为什么要从传统的Socket开发切换到NIO进行编程?为什么不直接基于JDK的NIO类库编程而选择Netty?如何全面系统地掌握Netty,进行NettyNIO开发、Netty编解码开发、Netty多协议开发?如何通过对Netty源码的学习获得更深入地知识?掌握了Netty后,如何将其应用到实际架构中?Netty工程师的就业前景和可涉
內容簡介:
《Netty 权威指南(第2 版)》是异步非阻塞通信领域的经典之作,基于最新版本的Netty 5.0 编写,是国内首本深入介绍Netty 原理和架构的书籍,也是作者多年实战经验的总结和浓缩。内容不仅包含Java NIO入门知识、Netty 的基础功能开发指导、编解码框架定制等,还包括私有协议栈定制和开发、Netty 核心类库源码分析,以及Netty 的架构剖析。

《Netty 权威指南(第2 版)》适合架构师、设计师、软件开发工程师、测试人员以及其他对Java NIO 框架、Netty 感兴趣的相关人士阅读,通过《Netty 权威指南(第2 版)》的学习,读者不仅能够掌握Netty 基础功能的使用和开发,更能够掌握Netty 核心类库的原理和使用约束,从而在实际工作中更好地使用Netty。
關於作者:
李林锋:Netty中国推广者,现华为技术有限公司平台中间件架构与设计部设计师,公司总裁技术创新奖获得者。长期从事高性能通信软件的架构设计和开发工作,有多年在NIO领域的设计、开发和运维经验,精通NIO编程和Netty、Mina等主流NIO框架。目前负责华为软件公司下一代SOA中间件和PaaS平台的架构设计工作。
目錄
基础篇走进Java NIO

第1 章Java 的IO 演进之路.2

1.1 IO 基础入门...............3

1.1.1 Linux 网络IO 模型简介.......3

1.1.2 IO 多路复用技术.................6

1.2 Java 的IO 演进..........8

1.3 总结............................
10

第2 章NIO 入门.................... 11

2.1 传统的BIO 编程....... 11

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

2.1.2 同步阻塞式IO 创建的TimeServer 源码分析.............
13

2.1.3 同步阻塞式IO 创建的TimeClient 源码分析..........
16

2.2 伪异步IO 编程........ 18

2.2.1 伪异步IO 模型图.............. 19

2.2.2 伪异步IO 创建的TimeServer 源码分析..... 19

2.2.3 伪异步IO 弊端分析........... 21

2.3 NIO 编程....................
24

2.3.1 NIO 类库简介.. 24

2.3.2 NIO 服务端序列图..............
28

2.3.3 NIO 创建的TimeServer 源码分析................ 30

2.3.4 NIO 客户端序列图..............
36

2.3.5 NIO 创建的TimeClient 源码分析................ 39

2.4 AIO 编程....................
45

2.4.1 AIO 创建的TimeServer 源码分析................ 46

2.4.2 AIO 创建的TimeClient 源码分析................ 51

2.4.3 AIO 版本时间服务器运行结果....................
56

2.5 4 种IO 的对比......... 58

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

2.5.2 不同IO 模型对比.............. 59

2.6 选择Netty 的理由..... 60

2.6.1 不选择Java 原生NIO 编程的原因............... 61

2.6.2 为什么选择Netty
................ 62

2.7 总结............................
63

入门篇 Netty NIO 开发指南

第3 章Netty 入门应用.......... 66

3.1 Netty 开发环境的搭建................
66

3.1.1 下载Netty 的软件包........... 67

3.1.2 搭建Netty 应用工程........... 67

3.2 Netty 服务端开发...... 68

3.3 Netty 客户端开发...... 73

3.4 运行和调试................ 76

3.4.1 服务端和客户端的运行...... 76

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

3.5 总结............................
77

第4 章TCP 粘包拆包问题的解决之道...... 79

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

4.1.1 TCP 粘包拆包问题说明..... 80

4.1.2 TCP 粘包拆包发生的原因....... 80

4.1.3 粘包问题的解决策略.......... 81

4.2 未考虑TCP 粘包导致功能异常案例................. 82

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

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

4.2.3 运行结果.......... 84

4.3 利用LineBasedFrameDecoder 解决TCP 粘包问题................ 85

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

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

4.3.3 运行支持TCP 粘包的时间服务器程序........ 90

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

4.4 总结............................
92

第5 章分隔符和定长解码器的应用...... 93

5.1 DelimiterBasedFrameDecoder 应用开发............. 94

5.1.1 DelimiterBasedFrameDecoder 服务端开发.... 94

5.1.2 DelimiterBasedFrameDecoder 客户端开发.... 97

5.1.3 运行DelimiterBasedFrameDecoder 服务端和客户端............... 99

5.2 FixedLengthFrameDecoder 应用开发............... 101

5.2.1 FixedLengthFrameDecoder 服务端开发...... 101

5.2.2 利用telnet 命令行测试EchoServer 服务端......103

5.3 总结..........................
104

中级篇 Netty 编解码开发指南

第6 章编解码技术.............. 106

6.1 Java 序列化的缺点 ......
107

6.1.1 无法跨语言.... 107

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

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

6.2 业界主流的编解码框架............
113

6.2.1 Google 的Protobuf 介绍.... 113

6.2.2 Facebook 的Thrift 介绍.... 115

6.2.3 JBoss Marshalling 介绍..... 116

6.3 总结..........................
117

第7 章MessagePack 编解码............... 118

7.1 MessagePack 介绍... 118

7.1.1 MessagePack 多语言支持.. 119

7.1.2 MessagePack Java API 介绍........................ 119

7.1.3 MessagePack 开发包下载. 120

7.2 MessagePack 编码器和解码器开发.................
120

7.2.1 MessagePack 编码器开发....... 120

7.2.2 MessagePack 解码器开发 ...... 121

7.2.3 功能测试........ 121

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

7.4 总结..........................
127

第8 章Google Protobuf 编解码.......... 128

8.1 Protobuf 的入门....... 129

8.1.1 Protobuf 开发环境搭建..... 129

8.1.2 Protobuf 编解码开发.........
131

8.1.3 运行Protobuf 例程............ 133

8.2 Netty 的Protobuf 服务端开发.. 133

8.2.1 Protobuf 版本的图书订购服务端开发........
134

8.2.2 Protobuf 版本的图书订购客户端开发........
136

8.2.3 Protobuf 版本的图书订购程序功能测试....
139

8.3 Protobuf 的使用注意事项.........
140

8.4 总结..........................
142

第9 章JBoss Marshalling 编解码....... 143

9.1 Marshalling 开发环境准备........
143

9.2 Netty 的Marshalling 服务端开发..................... 144

9.3 Netty 的Marshalling 客户端开发..................... 147

9.4 运行Marshalling 客户端和服务端例程........... 149

9.5 总结..........................
150

高级篇 Netty 多协议开发和应用

第10 章HTTP 协议开发应用............... 154

10.1 HTTP 协议介绍..... 155

10.1.1 HTTP 协议的URL
.......... 155

10.1.2 HTTP 请求消息(HttpRequest).............. 155

10.1.3 HTTP 响应消息(HttpResponse)........... 158

10.2 Netty HTTP 服务端入门开发.......
159

10.2.1 HTTP 服务端例程场景描述.....................
160

10.2.2 HTTP 服务端开发...........
160

10.2.3 Netty HTTP 文件服务器例程运行结果....
166

10.3 Netty HTTP+XML 协议栈开发.......................
170

10.3.1 开发场景介绍.................
171

10.3.2 HTTP+XML 协议栈设计.......174

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

10.3.4 HTTP+XML 编解码框架开发..................
183

10.3.5 HTTP+XML 协议栈测试....... 199

10.3.6 小结.............
201

10.4 总结........................
202

第11 章WebSocket 协议开发............. 203

11.1 HTTP 协议的弊端....... 204

11.2 WebSocket 入门..... 204

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

11.2.2 WebSocket 连接建立....... 206

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

11.2.4 WebSocket 连接关闭....... 208

11.3 Netty WebSocket 协议开发..... 209

11.3.1 WebSocket 服务端功能介绍.....................
209

11.3.2 WebSocket 服务端开发.... 210

11.3.3 运行WebSocket 服务端... 218

11.4 总结........................
219

第12 章私有协议栈开发.... 221

12.1 私有协议介绍........ 221

12.2 Netty 协议栈功能设计............
223

12.2.1 网络拓扑图.. 223

12.2.2 协议栈功能描述..............
224

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

12.2.4 消息定义...... 225

12.2.5 Netty 协议支持的字段类型......................
226

12.2.6 Netty 协议的编解码规范. 227

12.2.7 链路的建立.. 229

12.2.8 链路的关闭.. 230

12.2.9 可靠性设计.. 230

12.2.10 安全性设计 232

12.2.11 可扩展性设计................
232

12.3 Netty 协议栈开发.. 233

12.3.1 数据结构定义.................
233

12.3.2 消息编解码.. 237

12.3.3 握手和安全认证..............
241

12.3.4 心跳检测机制.................
245

12.3.5 断连重连...... 248

12.3.6 客户端代码.. 249

12.3.7 服务端代码.. 251

12.4 运行协议栈............ 252

12.4.1 正常场景...... 252

12.4.2 异常场景:服务端宕机重启....................
253

12.4.3 异常场景:客户端宕机重启....................
256

12.5 总结........................
256

第13 章服务端创建............ 258

13.1 原生NIO 类库的复杂性......... 259

13.2 Netty 服务端创建源码分析....
259

13.2.1 Netty 服务端创建时序图. 260

13.2.2 Netty 服务端创建源码分析......................
263

13.3 客户端接入源码分析..............
272

13.4 总结........................
275

第14 章客户端创建............ 276

14.1 Netty 客户端创建流程分析....
276

14.2.1 Netty 客户端创建时序图. 276

14.2.2 Netty 客户端创建流程分析......................
277

14.2 Netty 客户端创建源码分析....
278

14.2.1 客户端连接辅助类Bootstrap....................
278

14.2.2 客户端连接操作..............
281

14.2.3 异步连接结果通知..........
283

14.2.4 客户端连接超时机制......
284

14.3 总结........................
286

源码分析篇 Netty 功能介绍和源码分析

第15 章ByteBuf 和相关辅助类........... 288

15.1 ByteBuf 功能说明. 288

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

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

15.2 ByteBuf 源码分析. 308

15.2.1 ByteBuf 的主要类继承关系.....................
309

15.2.2 AbstractByteBuf 源码分析........................ 310

15.2.3 AbstractReferenceCountedByteBuf 源码分析.................. 319

15.2.4 UnpooledHeapByteBuf 源码分析.............. 321

15.2.5 PooledByteBuf 内存池原理分析...............
326

15.2.6 PooledDirectByteBuf 源码分析................. 329

15.3 ByteBuf 相关的辅助类功能介绍....................
332

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

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

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

15.3.4 ByteBufUtil .. 336

15.4 总结........................
337

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

16.1 Channel 功能说明. 338

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

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

16.2 Channel 源码分析. 343

16.2.1 Channel 的主要继承关系类图..................
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 功能说明... 364

16.4 Unsafe 源码分析... 365

16.4.1 Unsafe 继承关系类图...... 365

16.4.2 AbstractUnsafe 源码分析. 366

16.4.3 AbstractNioUnsafe 源码分析.................... 375

16.4.4 NioByteUnsafe 源码分析. 379

16.5 总结........................
387

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

17.1 ChannelPipeline 功能说明....... 389

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

17.1.2 自定义拦截器.................
391

17.1.3 构建pipeline 392

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

17.2 ChannelPipeline 源码分析....... 393

17.2.1 ChannelPipeline 的类继承关系图............. 393

17.2.2 ChannelPipeline 对ChannelHandler 的管理...........
393

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

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

17.3 ChannelHandler 功能说明....... 398

17.3.1 ChannelHandlerAdapter 功能说明............ 399

17.3.2 ByteToMessageDecoder 功能说明............ 399

17.3.3 MessageToMessageDecoder 功能说明...... 400

17.3.4 LengthFieldBasedFrameDecoder 功能说明............... 400

17.3.5 MessageToByteEncoder 功能说明............. 404

17.3.6 MessageToMessageEncoder 功能说明....... 404

17.3.7 LengthFieldPrepender 功能说明............... 405

17.4 ChannelHandler 源码分析....... 406

17.4.1 ChannelHandler 的类继承关系图.............
406

17.4.2 ByteToMessageDecoder 源码分析............ 407

17.4.3 MessageToMessageDecoder 源码分析...... 410

17.4.4 LengthFieldBasedFrameDecoder 源码分析............ 411

17.4.5 MessageToByteEncoder 源码分析............. 415

17.4.6 MessageToMessageEncoder 源码分析....... 416

17.4.7 LengthFieldPrepender 源码分析............... 417

17.5 总结........................
418

第18 章EventLoop 和EventLoopGroup.................... 419

18.1 Netty 的线程模型.. 419

18.1.1 Reactor 单线程模型.........
420

18.1.2 Reactor 多线程模型.........
421

18.1.3 主从Reactor 多线程模型 422

18.1.4 Netty 的线程模型............
423

18.1.5 最佳实践...... 424

18.2 NioEventLoop 源码分析.........
425

18.2.1 NioEventLoop 设计原理.. 425

18.2.2 NioEventLoop 继承关系类图...................
426

18.2.3 NioEventLoop.................. 427

18.3 总结........................
436

第19 章Future 和Promise .................. 438

19.1 Future 功能............
438

19.2 ChannelFuture 源码分析.........
443

19.3 Promise 功能介绍. 445

19.4 Promise 源码分析. 447

19.4.1 Promise 继承关系图........
447

19.4.2 DefaultPromise ................ 447

19.5 总结........................
449

架构和行业应用篇 Netty 高级特性

第20 章Netty 架构剖析..... 452

20.1 Netty 逻辑架构...... 452

20.1.1 Reactor 通信调度层.........
453

20.1.2 职责链ChannelPipeline
... 453

20.1.3 业务逻辑编排层(Service
ChannelHandler)........... 454

20.2 关键架构质量属性..................
454

20.2.1 高性能..........
454

20.2.2 可靠性..........
457

20.2.3 可定制性...... 460

20.2.4 可扩展性...... 460

20.3 总结........................
460

第21 章Java 多线程编程在Netty 中的应用............. 461

21.1 Java 内存模型与多线程编程.. 461

21.1.1 硬件的发展和多任务处理........................
461

21.1.2 Java 内存模型.................
462

21.2 Netty 的并发编程实践............
464

21.2.1 对共享的可变数据进行正确的同步.........
464

21.2.2 正确使用锁.. 465

21.2.3 volatile 的正确使用.........
467

21.2.4 CAS 指令和原子类.........
470

21.2.5 线程安全类的应用..........
472

21.2.6 读写锁的应用.................
476

21.2.7 线程安全性文档说明......
477

21.2.8 不要依赖线程优先级......
478

21.3 总结........................
479

第22 章高性能之道............ 480

22.1 RPC 调用性能模型分析..........
480

22.1.1 传统RPC 调用性能差的三宗罪............... 480

22.1.2 IO 通信性能三原则........
481

22.2 Netty 高性能之道.. 482

22.2.1 异步非阻塞通信..............
482

22.2.2 高效的Reactor 线程模型 482

22.2.3 无锁化的串行设计..........
485

22.2.4 高效的并发编程..............
486

22.2.5 高性能的序列化框架......
486

22.2.6 零拷贝..........
487

22.2.7 内存池..........
491

22.2.8 灵活的TCP 参数配置能力....................... 494

22.3 主流NIO 框架性能对比......... 495

22.4 总结........................
497

第23 章可靠性....................
498

23.1 可靠性需求............ 498

23.1.1 宕机的代价.. 498

23.1.2 Netty 可靠性需求............
499

23.2 Netty 高可靠性设计................
500

23.2.1 网络通信类故障..............
500

23.2.2 链路的有效性检测..........
507

23.2.3 Reactor 线程的保护.........
510

23.2.4 内存保护...... 513

23.2.5 流量整形...... 516

23.2.6 优雅停机接口.................
519

23.3 优化建议................ 520

23.3.1 发送队列容量上限控制...
520

23.3.2 回推发送失败的消息......
521

23.4 总结........................
521

第24 章安全性....................
522

24.1 严峻的安全形势.... 522

24.1.1 OpenSSL Heart bleed 漏洞.......... 522

24.1.2 安全漏洞的代价..............
523

24.1.3 Netty 面临的安全风险..... 523

24.2 Netty SSL 安全特性.................
525

24.2.1 SSL 单向认证..................
525

24.2.2 SSL 双向认证..................
532

24.2.3 第三方CA 认证.............. 536

24.3 Netty SSL 源码分析.................
538

24.3.1 客户端..........
538

24.3.2 服务端..........
541

24.3.3 消息读取...... 544

24.3.4 消息发送...... 545

24.4 Netty 扩展的安全特性............
546

24.4.1 IP 地址黑名单机制..........
547

24.4.2 接入认证...... 548

24.4 总结........................
550

第25 章Netty 未来展望..... 551

25.1 应用范围................ 551

25.2 技术演进................ 552

25.3 社区活跃度............ 552

25.4 Road Map ............... 552

25.5 总结........................
553

附录A Netty 参数配置表.... 554
內容試閱
13.2.1Netty服务端创建时序图

下面我们对Netty服务端创建的关键步骤和原理进行讲解。

步骤1:创建ServerBootstrap实例。ServerBootstrap是Netty服务端的启动辅助类,它提供了一系列的方法用于设置服务端启动相关的参数。底层通过门面模式对各种能力进行抽象和封装,尽量不需要用户跟过多的底层API打交道,降低用户的开发难度。

我们在创建ServerBootstrap实例时,会惊讶地发现ServerBootstrap只有一个无参的构造函数,作为启动辅助类这让人不可思议,因为它需要与多个其他组件或者类交互。ServerBootstrap构造函数没有参数的根本原因是因为它的参数太多了,而且未来也可能会发生变化,为了解决这个问题,就需要引入Builder模式。《Effective Java》第二版第2条建议遇到多个构造器参数时要考虑用构建器,关于多个参数构造函数的缺点和使用构建器的优点大家可以查阅《Effective Java》,在此不再详述。

步骤2:设置并绑定Reactor线程池。Netty的Reactor线程池是EventLoopGroup,它实际就是EventLoop的数组。EventLoop的职责是处理所有注册到本线程多路复用器Selector上的Channel,Selector的轮询操作由绑定的EventLoop线程run方法驱动,在一个循环体内循环执行。值得说明的是,EventLoop的职责不仅仅是处理网络IO事件,用户自定义的Task和定时任务Task也统一由EventLoop负责处理,这样线程模型就实现了统一。从调度层面看,也不存在在EventLoop线程中再启动其他类型的线程用于异步执行另外的任务,这样就避免了多线程并发操作和锁竞争,提升了IO线程的处理和调度性能。

步骤3:设置并绑定服务端Channel。作为NIO服务端,需要创建ServerSocketChannel,Netty对原生的NIO类库进行了封装,对应实现是NioServerSocketChannel。对于用户而言,不需要关心服务端Channel的底层实现细节和工作原理,只需要指定具体使用哪种服务端Channel即可。因此,Netty的ServerBootstrap方法提供了channel方法用于指定服务端Channel的类型。Netty通过工厂类,利用反射创建NioServerSocketChannel对象。由于服务端监听端口往往只需要在系统启动时才会调用,因此反射对性能的影响并不大。相关代码如下。


public
ServerBootstrap channelClass? extends ServerChannel channelClass {

if
channelClass == null {

throw new
NullPointerException"channelClass";

}

return
channelFactorynew
ServerBootstrapChannelFactoryServerChannelchannelClass;

}


步骤4:链路建立的时候创建并初始化ChannelPipeline。ChannelPipeline并不是NIO服务端必需的,它本质就是一个负责处理网络事件的职责链,负责管理和执行ChannelHandler。网络事件以事件流的形式在ChannelPipeline中流转,由ChannelPipeline根据ChannelHandler的执行策略调度ChannelHandler的执行。典型的网络事件如下。

(1)链路注册;

(2)链路激活;

(3)链路断开;

(4)接收到请求消息;

(5)请求消息接收并处理完毕;

(6)发送应答消息;

(7)链路发生异常;

(8)发生用户自定义事件。

步骤5:初始化ChannelPipeline完成之后,添加并设置ChannelHandler。ChannelHandler是Netty提供给用户定制和扩展的关键接口。利用ChannelHandler用户可以完成大多数的功能定制,例如消息编解码、心跳、安全认证、TSLSSL认证、流量控制和流量整形等。Netty同时也提供了大量的系统ChannelHandler供用户使用,比较实用的系统ChannelHandler总结如下。

(1)系统编解码框架——ByteToMessageCodec;

(2)通用基于长度的半包解码器——LengthFieldBasedFrameDecoder;

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

(4)SSL安全认证Handler——SslHandler;

(5)链路空闲检测Handler——IdleStateHandler;

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

(7)Base64编解码——Base64Decoder和Base64Encoder。

创建和添加ChannelHandler的代码示例如下。


.childHandlernew
ChannelInitializerSocketChannel {

@Override

public void
initChannelSocketChannel ch

throws Exception {

ch.pipeline.addLast

new EchoServerHandler;

}


};


步骤6:绑定并启动监听端口。在绑定监听端口之前系统会做一系列的初始化和检测工作,完成之后,会启动监听端口,并将ServerSocketChannel注册到Selector上监听客户端连接,相关代码如下。


protected void
doBindSocketAddress localAddress throws Exception {

javaChannel.socket.bindlocalAddress,
config.getBacklog;

}


步骤7:Selector轮询。由Reactor线程NioEventLoop负责调度和执行Selector轮询操作,选择准备就绪的Channel集合,相关代码如下。


private void
select throws IOException {

Selector selector = this.selector;

try {



此处代码省略......

int selectedKeys
= selector.selecttimeoutMillis;

selectCnt ++;

此处代码省略......

}


步骤8:当轮询到准备就绪的Channel之后,就由Reactor线程NioEventLoop执行ChannelPipeline的相应方法,最终调度并执行ChannelHandler,接口如图13-2所示。

步骤9:执行Netty系统ChannelHandler和用户添加定制的ChannelHandler。ChannelPipeline根据网络事件的类型,调度并执行ChannelHandler,相关代码如下。


public ChannelHandlerContext fireChannelReadObject msg {

DefaultChannelHandlerContext next =
findContextInboundMASK_CHANNEL_READ;

next.invoker.invokeChannelReadnext, msg;

return this;

}

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.