描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111632900
产品特色
内容简介
本书为了让读者扎稳高性能基础,浅显易懂地剖析高并发IO的底层原理,细致细腻地解析Reactor高性能模式,图文并茂地介绍Java异步回调模式。掌握这些基础原理,能够帮助读者解决Java后台开发的一些实际问题。
本书共12章,主要介绍高性能通信框架Netty,并详尽介绍Netty的EventLoop、Handler、Pipeline、ByteBuf、Decoder、Encoder等重要组件,然后介绍单体IM的实战设计和模块实现。本书对ZooKeeper、 Curator API、Redis、Jedis API的使用也进行详尽的介绍,让读者具备高并发、可扩展系统的设计和开发能力。
本书共12章,主要介绍高性能通信框架Netty,并详尽介绍Netty的EventLoop、Handler、Pipeline、ByteBuf、Decoder、Encoder等重要组件,然后介绍单体IM的实战设计和模块实现。本书对ZooKeeper、 Curator API、Redis、Jedis API的使用也进行详尽的介绍,让读者具备高并发、可扩展系统的设计和开发能力。
目 录
前言
第1章 高并发时代的必备技能 1
1.1 Netty为何这么火 1
1.1.1 Netty火热的程度 1
1.1.2 Netty是面试的必杀器 2
1.2 高并发利器Redis 2
1.2.1 什么是Redis 2
1.2.2 Redis成为缓存事实标准的原因 3
1.3 分布式利器ZooKeeper 3
1.3.1 什么是ZooKeeper 3
1.3.2 ZooKeeper的优势 4
1.4 高并发IM的综合实践 4
1.4.1 高并发IM的学习价值 4
1.4.2 庞大的应用场景 5
1.5 Netty、Redis、ZooKeeper实践计划 5
1.5.1 第1天:Java NIO实践 5
1.5.2 第2天:Reactor反应器模式实践 6
1.5.3 第3天:异步回调模式实践 7
1.5.4 第4天:Netty基础实践 8
1.5.5 第5天:解码器(Decoder)与编码器(Encoder)实践 9
1.5.6 第6天:JSON和ProtoBuf序列化实践 11
1.5.7 第7~10天:基于Netty的单聊实战 12
1.5.8 第11天:ZooKeeper实践计划 14
1.5.9 第12天:Redis实践计划 14
1.6 本章小结 16
第2章 高并发IO的底层原理 17
2.1 IO读写的基础原理 17
2.1.1 内核缓冲区与进程缓冲区 18
2.1.2 详解典型的系统调用流程 18
2.2 四种主要的IO模型 19
2.2.1 同步阻塞IO(Blocking IO) 20
2.2.2 同步非阻塞NIO(None Blocking IO) 21
2.2.3 IO多路复用模型(IO Multiplexing) 22
2.2.4 异步IO模型(Asynchronous IO) 23
2.3 通过合理配置来支持百万级并发连接 24
2.4 本章小结 26
第3章 Java NIO通信基础详解 27
3.1 Java NIO简介 27
3.1.1 NIO和OIO的对比 28
3.1.2 通道(Channel) 28
3.1.3 Selector 选择器 28
3.1.4 缓冲区(Buffer) 29
3.2 详解NIO Buffer类及其属性 29
3.2.1 Buffer类 29
3.2.2 Buffer类的重要属性 29
3.2.3 4个属性的小结 31
3.3 详解NIO Buffer类的重要方法 31
3.3.1 allocate()创建缓冲区 31
3.3.2 put()写入到缓冲区 32
3.3.3 flip()翻转 33
3.3.4 get()从缓冲区读取 34
3.3.5 rewind()倒带 35
3.3.6 mark( )和reset( ) 37
3.3.7 clear( )清空缓冲区 38
3.3.8 使用Buffer类的基本步骤 38
3.4 详解NIO Channel(通道)类 38
3.4.1 Channel(通道)的主要类型 39
3.4.2 FileChannel文件通道 39
3.4.3 使用FileChannel完成文件复制的实践案例 41
3.4.4 SocketChannel套接字通道 42
3.4.5 使用SocketChannel发送文件的实践案例 44
3.4.6 DatagramChannel数据报通道 46
3.4.7 使用DatagramChannel数据包通道发送数据的实践案例 47
3.5 详解NIO Selector选择器 49
3.5.1 选择器以及注册 49
3.5.2 SelectableChannel可选择通道 50
3.5.3 SelectionKey选择键 50
3.5.4 选择器使用流程 50
3.5.5 使用NIO实现Discard服务器的实践案例 52
3.5.6 使用SocketChannel在服务器端接收文件的实践案例 54
3.6 本章小结 57
第4章 鼎鼎大名的Reactor反应器模式 59
4.1 Reactor反应器模式为何如此重要 59
4.1.1 为什么首先学习Reactor反应器模式 59
4.1.2 Reactor反应器模式简介 60
4.1.3 多线程OIO的致命缺陷 60
4.2 单线程Reactor反应器模式 62
4.2.1 什么是单线程Reactor反应器 62
4.2.2 单线程Reactor反应器的参考代码 63
4.2.3 一个Reactor反应器版本的EchoServer实践案例 65
4.2.4 单线程Reactor反应器模式的缺点 67
4.3 多线程的Reactor反应器模式 68
4.3.1 多线程池Reactor反应器演进 68
4.3.2 多线程Reactor 反应器的实践案例 68
4.3.3 多线程Handler处理器的实践案例 70
4.4 Reactor反应器模式小结 72
4.5 本章小结 73
第5章 并发基础中的Future异步回调模式 74
5.1 从泡茶的案例说起 74
5.2 join异步阻塞 75
5.2.1 线程的join合并流程 75
5.2.2 使用join实现异步泡茶喝的实践案例 75
5.2.3 详解join合并方法 77
5.3 FutureTask异步回调之重武器 77
5.3.1 Callable接口 77
5.3.2 初探FutureTask类 78
5.3.3 Future接口 79
5.3.4 再探FutureTask类 79
5.3.5 使用FutureTask类实现异步泡茶喝的实践案例 80
5.4 Guava的异步回调 82
5.4.1 详解FutureCallback 82
5.4.2 详解ListenableFuture 83
5.4.3 ListenableFuture异步任务 84
5.4.4 使用Guava实现泡茶喝的实践案例 84
5.5 Netty的异步回调模式 87
5.5.1 详解GenericFutureListener接口 87
5.5.2 详解Netty的Future接口 88
5.5.3 ChannelFuture的使用 88
5.5.4 Netty的出站和入站异步回调 89
5.6 本章小结 90
第6章 Netty原理与基础 91
6.1 第一个Netty的实践案例DiscardServer 91
6.1.1 创建第一个Netty项目 91
6.1.2 第一个Netty服务器端程序 92
6.1.3 业务处理器NettyDiscardHandler 93
6.1.4 运行NettyDiscardServer 94
6.2 解密Netty中的Reactor反应器模式 95
6.2.1 回顾Reactor反应器模式中IO事件的处理流程 95
6.2.2 Netty中的Channel通道组件 96
6.2.3 Netty中的Reactor 反应器 96
6.2.4 Netty中的Handler处理器 97
6.2.5 Netty的流水线(Pipeline) 98
6.3 详解Bootstrap启动器类 100
6.3.1
第1章 高并发时代的必备技能 1
1.1 Netty为何这么火 1
1.1.1 Netty火热的程度 1
1.1.2 Netty是面试的必杀器 2
1.2 高并发利器Redis 2
1.2.1 什么是Redis 2
1.2.2 Redis成为缓存事实标准的原因 3
1.3 分布式利器ZooKeeper 3
1.3.1 什么是ZooKeeper 3
1.3.2 ZooKeeper的优势 4
1.4 高并发IM的综合实践 4
1.4.1 高并发IM的学习价值 4
1.4.2 庞大的应用场景 5
1.5 Netty、Redis、ZooKeeper实践计划 5
1.5.1 第1天:Java NIO实践 5
1.5.2 第2天:Reactor反应器模式实践 6
1.5.3 第3天:异步回调模式实践 7
1.5.4 第4天:Netty基础实践 8
1.5.5 第5天:解码器(Decoder)与编码器(Encoder)实践 9
1.5.6 第6天:JSON和ProtoBuf序列化实践 11
1.5.7 第7~10天:基于Netty的单聊实战 12
1.5.8 第11天:ZooKeeper实践计划 14
1.5.9 第12天:Redis实践计划 14
1.6 本章小结 16
第2章 高并发IO的底层原理 17
2.1 IO读写的基础原理 17
2.1.1 内核缓冲区与进程缓冲区 18
2.1.2 详解典型的系统调用流程 18
2.2 四种主要的IO模型 19
2.2.1 同步阻塞IO(Blocking IO) 20
2.2.2 同步非阻塞NIO(None Blocking IO) 21
2.2.3 IO多路复用模型(IO Multiplexing) 22
2.2.4 异步IO模型(Asynchronous IO) 23
2.3 通过合理配置来支持百万级并发连接 24
2.4 本章小结 26
第3章 Java NIO通信基础详解 27
3.1 Java NIO简介 27
3.1.1 NIO和OIO的对比 28
3.1.2 通道(Channel) 28
3.1.3 Selector 选择器 28
3.1.4 缓冲区(Buffer) 29
3.2 详解NIO Buffer类及其属性 29
3.2.1 Buffer类 29
3.2.2 Buffer类的重要属性 29
3.2.3 4个属性的小结 31
3.3 详解NIO Buffer类的重要方法 31
3.3.1 allocate()创建缓冲区 31
3.3.2 put()写入到缓冲区 32
3.3.3 flip()翻转 33
3.3.4 get()从缓冲区读取 34
3.3.5 rewind()倒带 35
3.3.6 mark( )和reset( ) 37
3.3.7 clear( )清空缓冲区 38
3.3.8 使用Buffer类的基本步骤 38
3.4 详解NIO Channel(通道)类 38
3.4.1 Channel(通道)的主要类型 39
3.4.2 FileChannel文件通道 39
3.4.3 使用FileChannel完成文件复制的实践案例 41
3.4.4 SocketChannel套接字通道 42
3.4.5 使用SocketChannel发送文件的实践案例 44
3.4.6 DatagramChannel数据报通道 46
3.4.7 使用DatagramChannel数据包通道发送数据的实践案例 47
3.5 详解NIO Selector选择器 49
3.5.1 选择器以及注册 49
3.5.2 SelectableChannel可选择通道 50
3.5.3 SelectionKey选择键 50
3.5.4 选择器使用流程 50
3.5.5 使用NIO实现Discard服务器的实践案例 52
3.5.6 使用SocketChannel在服务器端接收文件的实践案例 54
3.6 本章小结 57
第4章 鼎鼎大名的Reactor反应器模式 59
4.1 Reactor反应器模式为何如此重要 59
4.1.1 为什么首先学习Reactor反应器模式 59
4.1.2 Reactor反应器模式简介 60
4.1.3 多线程OIO的致命缺陷 60
4.2 单线程Reactor反应器模式 62
4.2.1 什么是单线程Reactor反应器 62
4.2.2 单线程Reactor反应器的参考代码 63
4.2.3 一个Reactor反应器版本的EchoServer实践案例 65
4.2.4 单线程Reactor反应器模式的缺点 67
4.3 多线程的Reactor反应器模式 68
4.3.1 多线程池Reactor反应器演进 68
4.3.2 多线程Reactor 反应器的实践案例 68
4.3.3 多线程Handler处理器的实践案例 70
4.4 Reactor反应器模式小结 72
4.5 本章小结 73
第5章 并发基础中的Future异步回调模式 74
5.1 从泡茶的案例说起 74
5.2 join异步阻塞 75
5.2.1 线程的join合并流程 75
5.2.2 使用join实现异步泡茶喝的实践案例 75
5.2.3 详解join合并方法 77
5.3 FutureTask异步回调之重武器 77
5.3.1 Callable接口 77
5.3.2 初探FutureTask类 78
5.3.3 Future接口 79
5.3.4 再探FutureTask类 79
5.3.5 使用FutureTask类实现异步泡茶喝的实践案例 80
5.4 Guava的异步回调 82
5.4.1 详解FutureCallback 82
5.4.2 详解ListenableFuture 83
5.4.3 ListenableFuture异步任务 84
5.4.4 使用Guava实现泡茶喝的实践案例 84
5.5 Netty的异步回调模式 87
5.5.1 详解GenericFutureListener接口 87
5.5.2 详解Netty的Future接口 88
5.5.3 ChannelFuture的使用 88
5.5.4 Netty的出站和入站异步回调 89
5.6 本章小结 90
第6章 Netty原理与基础 91
6.1 第一个Netty的实践案例DiscardServer 91
6.1.1 创建第一个Netty项目 91
6.1.2 第一个Netty服务器端程序 92
6.1.3 业务处理器NettyDiscardHandler 93
6.1.4 运行NettyDiscardServer 94
6.2 解密Netty中的Reactor反应器模式 95
6.2.1 回顾Reactor反应器模式中IO事件的处理流程 95
6.2.2 Netty中的Channel通道组件 96
6.2.3 Netty中的Reactor 反应器 96
6.2.4 Netty中的Handler处理器 97
6.2.5 Netty的流水线(Pipeline) 98
6.3 详解Bootstrap启动器类 100
6.3.1
前 言
移动时代、5G时代、物联网时代的大幕已经开启,它们对于高性能、高并发的开发知识和技术的要求,抬升了Java工程师的学习台阶和面试门槛。
大公司的面试题从某个侧面映射出生产场景中对专项技术的要求。高并发的面试题以前基本是BAT等大公司的专利,现在几乎蔓延至与Java项目相关的整个行业。例如,与Java NIO、Reactor模式、高性能通信、分布式锁、分布式ID、分布式缓存、高并发架构等技术相关的面试题,从以前的加分题变成了现在的基础题,这也映射出开发Java项目所必需的技术栈:分布式Java框架、Redis缓存、分布式搜索ElasticSearch、分布式协调ZooKeeper、消息队列Kafka、高性能通信框架Netty。
本书内容
本书的内容源于“疯狂创客圈社群”的博客,以及社群持续迭代的CrazyIM项目,虽然书中重在讲解Netty、Redis、ZooKeeper的使用方法,但是还有一个更大的价值,就是为大家打下Java高并发开发技术的坚实基础。
首先,本书从操作系统的底层原理开始讲解:浅显易懂地剖析高并发IO的底层原理,并介绍如何让单体Java应用支持百万级的高并发;从传统的阻塞式OIO开始,细致地解析Reactor高性能模式,介绍高性能网络开发的基础知识;从Java的线程Join和线程池开始,介绍Java Future和Guava ListenableFuture两种常用异步回调技术。这些原理方面的基础知识非常重要,是大家在日常开发Java后台应用时解决实际问题的金钥匙。
接着,重点讲解Netty。这是目前当之无愧的高性能通信框架皇冠上的明珠,是支撑其他众多著名的高并发、分布式、大数据框架底层的框架。这里有两大特色:一是从Reactor模式入手,以四两拨千斤的方式来学习Netty原理;二是通过Netty来解决网络编程中的重点难题,如ProtoBuf序列化问题、半包问题等。
然后,对ZooKeeper进行详细的介绍。除了全面地介绍使用Curator API操作ZooKeeper之外,还从实战的角度出发,介绍如何使用ZooKeeper来设计分布式ID生成器,并对重要的SnowFlake算法进行详细的介绍。另外,还通过图文并茂和结合小故事的方式浅显易懂地介绍分布式锁的基本原理,并完成一个ZooKeeper分布式锁的小实践案例。
接下来,从实践开发层面对Redis进行说明,详细介绍Redis的5种数据类型、客户端操作指令、Jedis Java API。另外,还通过spring-data-redis来完成两种方式的数据分布式缓存,并详尽地介绍Spring的缓存注解以及涉及的SpEL表达式语言。
最后,通过CrazyIM项目介绍一个亿级流量的高并发IM系统模型。这个高并发架构的系统模型不仅仅限于IM系统,通过简单的调整和适配,就可以应用于当前主流的Java后台系统。
读者对象
(1)对Java NIO、高性能IO、高并发编程感兴趣的大专院校学生。
(2)需要学习Java高并发技术、高并发架构的初、中级Java工程师。
(3)生产项目中需要用到Netty、Redis、ZooKeeper三大框架的架构师或者项目人员。
本书源代码下载
本书的源代码可以从https://gitee.com/sfasdfasdfsdf/netty_redis_zookeeper_source_code.git下载。另外,还可以登录机械工业出版社华章公司网站(www.hzbook.com)下载,先搜索到本书,然后在页面上的“资料下载”模块下载即可。如果下载有问题,请发送电子邮件至[email protected],邮件主题为“求Netty、Redis、ZooKeeper高并发实战下载资源”
勘误和支持
由于作者水平和能力有限,不妥之处在所难免,希望读者批评指正。本书的读者QQ群为104131248,目前群中已经包含了不少高质量的面试题以及开发技术难题,欢迎读者入群进行交流。
致谢
写书,不仅仅是一项技术活,而且是一项工匠活,为了确保书中知识的全面性、系统性,我需要不断地思考与总结。为了保证书中的每一行程序都是正确的,我需要反复地编写LLT用例去进行验证。总之,一本优质的书,意味着需要牺牲陪伴家人的大量时间。感谢我的妻子、孩子们给我一贯的支持和帮助!
感谢卞诚君老师在我写书过程中给予的指导和帮助。没有他的提议,我不会想到将自己发布在“疯狂创客圈”社群中高并发方面的博客文章整理成一本书出版。另外,还让我感觉到写博客和写书不是一个层面的事情。博客里的很多内容是不全面、不严谨的,甚至是错误的。
感谢“疯狂创客圈”社群中的小伙伴们,虽然你们的很多技术难题,我不一定能给出最佳的解答方案,但正是因为一路同行,一直坦诚、纯粹的技术交流,大家相互启发了许多技术灵感,拓展了彼此的技术视野,最终提升了水平。欢迎大家来“砸”问题,也欢迎大家多多交流。
大公司的面试题从某个侧面映射出生产场景中对专项技术的要求。高并发的面试题以前基本是BAT等大公司的专利,现在几乎蔓延至与Java项目相关的整个行业。例如,与Java NIO、Reactor模式、高性能通信、分布式锁、分布式ID、分布式缓存、高并发架构等技术相关的面试题,从以前的加分题变成了现在的基础题,这也映射出开发Java项目所必需的技术栈:分布式Java框架、Redis缓存、分布式搜索ElasticSearch、分布式协调ZooKeeper、消息队列Kafka、高性能通信框架Netty。
本书内容
本书的内容源于“疯狂创客圈社群”的博客,以及社群持续迭代的CrazyIM项目,虽然书中重在讲解Netty、Redis、ZooKeeper的使用方法,但是还有一个更大的价值,就是为大家打下Java高并发开发技术的坚实基础。
首先,本书从操作系统的底层原理开始讲解:浅显易懂地剖析高并发IO的底层原理,并介绍如何让单体Java应用支持百万级的高并发;从传统的阻塞式OIO开始,细致地解析Reactor高性能模式,介绍高性能网络开发的基础知识;从Java的线程Join和线程池开始,介绍Java Future和Guava ListenableFuture两种常用异步回调技术。这些原理方面的基础知识非常重要,是大家在日常开发Java后台应用时解决实际问题的金钥匙。
接着,重点讲解Netty。这是目前当之无愧的高性能通信框架皇冠上的明珠,是支撑其他众多著名的高并发、分布式、大数据框架底层的框架。这里有两大特色:一是从Reactor模式入手,以四两拨千斤的方式来学习Netty原理;二是通过Netty来解决网络编程中的重点难题,如ProtoBuf序列化问题、半包问题等。
然后,对ZooKeeper进行详细的介绍。除了全面地介绍使用Curator API操作ZooKeeper之外,还从实战的角度出发,介绍如何使用ZooKeeper来设计分布式ID生成器,并对重要的SnowFlake算法进行详细的介绍。另外,还通过图文并茂和结合小故事的方式浅显易懂地介绍分布式锁的基本原理,并完成一个ZooKeeper分布式锁的小实践案例。
接下来,从实践开发层面对Redis进行说明,详细介绍Redis的5种数据类型、客户端操作指令、Jedis Java API。另外,还通过spring-data-redis来完成两种方式的数据分布式缓存,并详尽地介绍Spring的缓存注解以及涉及的SpEL表达式语言。
最后,通过CrazyIM项目介绍一个亿级流量的高并发IM系统模型。这个高并发架构的系统模型不仅仅限于IM系统,通过简单的调整和适配,就可以应用于当前主流的Java后台系统。
读者对象
(1)对Java NIO、高性能IO、高并发编程感兴趣的大专院校学生。
(2)需要学习Java高并发技术、高并发架构的初、中级Java工程师。
(3)生产项目中需要用到Netty、Redis、ZooKeeper三大框架的架构师或者项目人员。
本书源代码下载
本书的源代码可以从https://gitee.com/sfasdfasdfsdf/netty_redis_zookeeper_source_code.git下载。另外,还可以登录机械工业出版社华章公司网站(www.hzbook.com)下载,先搜索到本书,然后在页面上的“资料下载”模块下载即可。如果下载有问题,请发送电子邮件至[email protected],邮件主题为“求Netty、Redis、ZooKeeper高并发实战下载资源”
勘误和支持
由于作者水平和能力有限,不妥之处在所难免,希望读者批评指正。本书的读者QQ群为104131248,目前群中已经包含了不少高质量的面试题以及开发技术难题,欢迎读者入群进行交流。
致谢
写书,不仅仅是一项技术活,而且是一项工匠活,为了确保书中知识的全面性、系统性,我需要不断地思考与总结。为了保证书中的每一行程序都是正确的,我需要反复地编写LLT用例去进行验证。总之,一本优质的书,意味着需要牺牲陪伴家人的大量时间。感谢我的妻子、孩子们给我一贯的支持和帮助!
感谢卞诚君老师在我写书过程中给予的指导和帮助。没有他的提议,我不会想到将自己发布在“疯狂创客圈”社群中高并发方面的博客文章整理成一本书出版。另外,还让我感觉到写博客和写书不是一个层面的事情。博客里的很多内容是不全面、不严谨的,甚至是错误的。
感谢“疯狂创客圈”社群中的小伙伴们,虽然你们的很多技术难题,我不一定能给出最佳的解答方案,但正是因为一路同行,一直坦诚、纯粹的技术交流,大家相互启发了许多技术灵感,拓展了彼此的技术视野,最终提升了水平。欢迎大家来“砸”问题,也欢迎大家多多交流。
尼恩
中国武汉
评论
还没有评论。