Netty实战 是为想要或者正在使用Java 从事高性能网络编程的人而写的,循序渐进地介绍了Netty各个方面的内容。 Netty实战 共分为4 个部分:diyi部分详细地介绍Netty 的相关概念以及核心组件,第二部分介绍自定义协议经常用到的编解码器,第三部分介绍Netty 对于应用层高级协议的支持,会覆盖常见的协议及其在实践中的应用,第四部分是几个案例研究。此外,附录部分会还简单地介绍Maven,以及如何通过使用Maven 编译和运行Netty实战 中的示例。 阅读本书不需要读者精通Java 网络和并发编程。如果想要更加深入地理解本书背后的理念以及Netty 源码本身,可以系统地学习一下Java 网络编程、NIO、并发和异步编程以及相关的设计模式。
- Netty之父”Trustin Lee作序推荐 - 中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的品质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Netty,在整个行业中,Netty广泛而成功的应用,使其成为了Java高性能网络编程的卓绝框架。 Netty的现Tech Lead Norman在Netty实战 中循序渐进地讲解了Netty的各个关键部分,在看完Netty实战 后,你不但可以熟练地使用Netty来构建以上系统,并且还可以避免很多常见的陷阱。 无论是想要学习Spring 5 、Spark、Cassandra等这样的系统,还是通过学习Netty来构建自己的基于Java的高性能网络框架,或者是更加具体的高性能Web或者游戏服务器等,本书都将是你的绝佳拍档。 本书中文版基于zuixin的Netty4.1.9做了修订,希望本书能够给你带来一个接近的阅读体验,并能帮到你。
作者简介 Norman Maurer是苹果公司的zishen软件工程师,同时也是Netty的核心开发人员。 Marvin Allen Wolfthal是Dell Services的顾问,他使用Netty实现了多个任务关键型的企业系统。 译者简介 何品,目前是的一名zishen软件工程师,热爱网络、并发、异步相关的主题以及函数式编程,同时也是Netty、Akka等项目的贡献者,活跃于Scala社区,目前也在从事GraphQL相关的开发工作。
及时部分 Netty的概念及体系结构
第1章 Netty——异步和事件驱动3
1.1Java 网络编程4
1.1.1Java NIO5
1.1.2选择器6
1.2Netty 简介6
1.2.1谁在使用Netty7
1.2.2异步和事件驱动8
1.3Netty 的核心组件9
1.3.1Channel9
1.3.2回调9
1.3.3Future10
1.3.4事件和ChannelHandler11
1.3.5把它们放在一起12
1.4小结13
第2章 你的及时款Netty应用程序14
2.1设置开发环境14
2.1.1获取并安装Java 开发工具包14
2.1.2下载并安装IDE15
2.1.3下载和安装Apache Maven15
2.1.4配置工具集16
2.2Netty 客户端/服务器概览16
2.3编写Echo 服务器17
2.3.1ChannelHandler 和业务逻辑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.1Channel、EventLoop 和ChannelFuture30
3.1.1Channel 接口31
3.1.2EventLoop 接口31
3.1.3ChannelFuture 接口32
3.2ChannelHandler 和ChannelPipeline32
3.2.1ChannelHandler 接口32
3.2.2ChannelPipeline 接口33
3.2.3更加深入地了解ChannelHandler34
3.2.4编码器和解码器35
3.2.5抽象类SimpleChannelInboundHandler35
3.3引导36
3.4小结37
第4章 传输38
4.1案例研究:传输迁移38
4.1.1不通过Netty 使用OIO和NIO39
4.1.2通过Netty 使用OIO和NIO41
4.1.3非阻塞的Netty 版本42
4.2传输API43
4.3内置的传输45
4.3.1NIO——非阻塞I/O46
4.3.2Epoll——用于Linux的本地非阻塞传输47
4.3.3OIO——旧的阻塞I/O48
4.3.4用于JVM 内部通信的Local 传输48
4.3.5Embedded 传输49
4.4传输的用例49
4.5小结51
第5章 ByteBuf52
5.1ByteBuf 的API52
5.2ByteBuf 类——Netty的数据容器53
5.2.1它是如何工作的53
5.2.2ByteBuf 的使用模式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.4ByteBufHolder 接口65
5.5ByteBuf 分配65
5.5.1按需分配:ByteBufAllocator 接口65
5.5.2Unpooled 缓冲区67
5.5.3ByteBufUtil 类67
5.6引用计数67
5.7小结68
第6章 ChannelHandler 和ChannelPipeline70
6.1ChannelHandler 家族70
6.1.1Channel 的生命周期70
6.1.2ChannelHandler的生命周期71
6.1.3ChannelInboundHandler接口71
6.1.4ChannelOutboundHandler接口73
6.1.5ChannelHandler 适配器74
6.1.6资源管理74
6.2ChannelPipeline 接口76
6.2.1修改ChannelPipeline78
6.2.2触发事件79
6.3ChannelHandlerContext接口80
6.3.1使用ChannelHandlerContext82
6.3.2ChannelHandler 和ChannelHandlerContext 的高级用法84
6.4异常处理86
6.4.1处理入站异常86
6.4.2处理出站异常87
6.5小结88
第7章 EventLoop 和线程模型89
7.1线程模型概述89
7.2EventLoop 接口90
7.2.1Netty 4 中的I/O 和事件处理92
7.2.2Netty 3 中的I/O 操作92
7.3任务调度93
7.3.1JDK 的任务调度API93
7.3.2使用EventLoop调度任务94
7.4实现细节95
7.4.1线程管理95
7.4.2EventLoop/线程的分配96
7.5小结98
第8章 引导99
8.1Bootstrap 类99
8.2引导客户端和无连接协议101
8.2.1引导客户端102
8.2.2Channel 和EventLoopGroup 的兼容性103
8.3引导服务器104
8.3.1ServerBootstrap 类104
8.3.2引导服务器105
8.4从Channel引导客户端107
8.5在引导过程中添加多个ChannelHandler108
8.6使用Netty 的ChannelOption 和属性110
8.7引导DatagramChannel111
8.8关闭112
8.9小结112
第9章 单元测试113
9.1EmbeddedChannel概述113
9.2使用EmbeddedChannel测试ChannelHandler115
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抽象类ByteToMessageDecoder126
10.2.2抽象类ReplayingDecoder127
10.2.3抽象类MessageToMessageDecoder128
10.2.4TooLongFrameException 类130
10.3编码器131
10.3.1抽象类MessageToByteEncoder131
10.3.2抽象类MessageToMessageEncoder132
10.4抽象的编解码器类133
10.4.1抽象类ByteToMessageCodec133
10.4.2抽象类MessageToMessageCodec134
10.4.3CombinedChannelDuplexHandler 类137
10.5小结138
第11章 预置的ChannelHandler和编解码器139
11.1通过SSL/TLS 保护Netty 应用程序139
11.2构建基于Netty 的HTTP/HTTPS 应用程序141
11.2.1HTTP 解码器、编码器和编解码器141
11.2.2聚合HTTP 消息143
11.2.3HTTP 压缩144
11.2.4使用HTTPS145
11.2.5WebSocket146
11.3空闲的连接和超时148
11.4解码基于分隔符的协议和基于长度的协议150
11.4.1基于分隔符的协议150
11.4.2基于长度的协议153
11.5写大型数据155
11.6序列化数据 157
11.6.1JDK 序列化157
11.6.2使用JBoss Marshalling进行序列化157
11.6.3通过Protocol Buffers序列化159
11.7小结160
第三部分网络协议
第12章 WebSocket163
12.1WebSocket 简介163
12.2我们的WebSocket 示例应用程序164
12.3添加WebSocket支持165
12.3.1处理HTTP 请求165
12.3.2处理WebSocket 帧168
12.3.3初始化ChannelPipeline169
12.3.4引导171
12.4测试该应用程序173
12.5小结176
第13章使用UDP 广播事件177
13.1UDP 的基础知识177
13.2UDP 广播178
13.3UDP 示例应用程序178
13.4消息 POJO:LogEvent179
13.5编写广播者180
13.6编写监视器185
13.7运行LogEventBroadcaster 和LogEventMonitor187
13.8小结189
第四部分案例研究
第14章 案例研究,及时部分193
14.1Droplr—构建移动服务193
14.1.1这一切的起因193
14.1.2Droplr 是怎样工作的194
14.1.3创造一个更加快速的上传体验194
14.1.4技术栈196
14.1.5性能199
14.1.6小结——站在巨人的肩膀上200
14.2Firebase—实时的数据同步服务200
14.2.1Firebase 的架构201
14.2.2长轮询201
14.2.3HTTP 1.1 keep-alive和流水线化204
14.2.4控制SslHandler205
14.2.5Firebase 小结207
14.3Urban Airship—构建移动服务207
14.3.1移动消息的基础知识207
14.3.2第三方递交208
14.3.3使用二进制协议的例子209
14.3.4直接面向设备的递交211
14.3.5Netty 擅长管理大量的并发连接212
14.3.6Urban Airship 小结——跨越防火墙边界213
14.4小结214
第15章 案例研究,第二部分215
15.1Netty 在Facebook 的使用:Nifty 和Swift215
15.1.1什么是Thrift215
15.1.2使用Netty 改善Java Thrift 的现状216
15.1.3Nifty 服务器的设计217
15.1.4Nifty 异步客户端的设计220
15.1.5Swift:一种更快的构建Java Thrift 服务的方式221
15.1.6结果221
15.1.7Facebook 小结224
15.2Netty 在Twitter的使用:Finagle224
15.2.1Twitter 成长的烦恼224
15.2.2Finagle 的诞生224
15.2.3Finagle 是如何工作的225
15.2.4Finagle 的抽象230
15.2.5故障管理231
15.2.6组合服务232
15.2.7未来:Netty232
15.2.8Twitter 小结233
15.3小结233
附录Maven 介绍234
“diyi本关于Netty的书……展示了如何构建高性能、低延迟的网络应用程序。” ——摘自Netty创始人Trustin Lee为本书撰写的前言 “高性能的Java网络栈——涵盖了从概念到zuijia实践的内容。” ——Christian Bach,Grid Trading Platform “关于较大限度利用Netty的zui的内容。” ——Jürgen Hoffmann,Red Hat “关于Netty框架的极好综述。强烈推荐给使用Java处理性能敏感的网络I/O的任
非常满意,很喜欢
很好,就是比想象中薄了一点
学习Java io,到时找个好工作
书不厚,实战系列一直不错,推荐
OK OK
先评论,看完之后再补评
不错正在学习
不错不错不错不错不错不错不错不错不错不错
看了一下目录,还不错;活动时买的,很划算
送货速度快,书籍质量好,优惠力度大
先看看再说。。。。。。
很好,书不错
不错不错哦!
有点失望,是不是漏了很多章节?
还没看,不知道
good de
还行啊,可以看看呢,还在看,没看完
还没有看,看完再评论
对工作帮助大
对工作帮助很大,可以开阔技术视野,书的印刷质量也很好,快递员服务态度不错。在当当购买书本体验好。
很好,很有用
帮同事买的,一本好书,并推荐给其他软件的开发的同事。
暂且不论译者的技术水平如何,仅从翻译水平来看,基本只能打一分,看这书还不如看英文文档舒服,各种蹩脚,真的感觉这英语是体育老师教的。白瞎一本好书!