当前位置:主页 > 书籍配套资源 > Java核心编程配套资源
《Java高并发核心编程 卷1:NIO、Netty、Redis、ZooKeeper》源代码

《Java高并发核心编程 卷1:NIO、Netty、Redis、ZooKeeper》源代码

  • 更新:2022-01-05
  • 大小:4.35 MB
  • 类别:Java核心编程
  • 作者:尼恩
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书从操作系统底层的IO原理入手,提供了高性能开发的实际案例是一本Java高并发编程的基本原理和实用书籍。

本书共分为15章。第1~4章为高并发基础,浅显易懂地剖析高并发IO的底层原理,细致地讲解Reactor高性能模式,图文并茂地介绍Java异步回调模式。这些原理方面的基础知识非常重要,会为读者打下坚实的基础,也是日常开发Java后台应用时解决实际问题的金钥匙。第5~8章为Netty原理和实战,是本书的重中之重,主要介绍高性能通信框架Netty、Netty的重要组件、单体IM的实战设计和模块实现。第9~12章从TCP、HTTP入手,介绍客户端与服务端、服务端与服务端之间的高性能HTTP通信和WebSocket通信。第13~15章对ZooKeeper、Curator API、Redis、Jedis API的使用进行详尽的说明,以提升读者设计和开发高并发、可扩展系统的能力。

封面图

目录

  • 前言
  • 自序
  • 第1章 高并发时代的必备技能1
  • 1.1 Netty为何这么火1
  • 1.1.1 Netty火热的程度1
  • 1.1.2 Netty是面试的必杀器2
  • 1.2 高并发利器Redis2
  • 1.2.1 什么是Redis2
  • 1.2.2 Redis成为缓存事实标准的原因3
  • 1.3 分布式利器ZooKeeper3
  • 1.3.1 什么是ZooKeeper3
  • 1.3.2 ZooKeeper的优势4
  • 1.4 高性能HTTP通信技术4
  • 1.4.1 十万级以上高并发场景中的高并发HTTP通信技术5
  • 1.4.2 微服务之间的高并发RPC技术6
  • 1.5 高并发IM的综合实战7
  • 1.5.1 高并发IM的学习价值8
  • 1.5.2 庞大的应用场景8
  • 第2章 高并发IO的底层原理10
  • 2.1 IO读写的基本原理10
  • 2.1.1 内核缓冲区与进程缓冲区11
  • 2.1.2 典型的系统调用流程11
  • 2.2 四种主要的IO模型13
  • 2.2.1 同步阻塞IO14
  • 2.2.2 同步非阻塞IO15
  • 2.2.3 IO多路复用16
  • 2.2.4 异步IO17
  • 2.3 通过合理配置来支持百万级并发连接18
  • 第3章 Java NIO核心详解21
  • 3.1 Java NIO简介21
  • 3.1.1 NIO和OIO的对比21
  • 3.1.2 通道22
  • 3.1.3 选择器22
  • 3.1.4 缓冲区23
  • 3.2 详解NIO Buffer类及其属性23
  • 3.2.1 Buffer类23
  • 3.2.2 Buffer类的重要属性23
  • 3.3 详解NIO Buffer类的重要方法26
  • 3.3.1 allocate()26
  • 3.3.2 put()27
  • 3.3.3 flip()27
  • 3.3.4 get()29
  • 3.3.5 rewind()30
  • 3.3.6 mark()和reset()32
  • 3.3.7 clear()33
  • 3.3.8 使用Buffer类的基本步骤34
  • 3.4 详解NIO Channel类34
  • 3.4.1 FileChannel35
  • 3.4.2 使用FileChannel完成文件复制的实战案例37
  • 3.4.3 SocketChannel39
  • 3.4.4 使用SocketChannel发送文件的实战案例41
  • 3.4.5 DatagramChannel43
  • 3.4.6 使用DatagramChannel发送数据的实战案例45
  • 3.5 详解NIO Selector47
  • 3.5.1 选择器与注册47
  • 3.5.2 SelectableChannel48
  • 3.5.3 SelectionKey48
  • 3.5.4 选择器使用流程48
  • 3.5.5 使用NIO实现Discard服务器的实战案例50
  • 3.5.6 使用SocketChannel在服务端接收文件的实战案例53
  • 第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 什么是单线程Reactor62
  • 4.2.2 单线程Reactor的参考代码63
  • 4.2.3 单线程Reactor模式的EchoServer的实战案例66
  • 4.2.4 单线程Reactor模式的缺点69
  • 4.3 多线程Reactor模式69
  • 4.3.1 多线程版本的Reactor模式演进69
  • 4.3.2 多线程版本Reactor的实战案例69
  • 4.3.3 多线程版本Handler的实战案例72
  • 4.4 Reactor模式的优缺点74
  • 第5章 Netty核心原理与基础实战76
  • 5.1 第一个Netty实战案例DiscardServer76
  • 5.1.1 创建第一个Netty项目76
  • 5.1.2 第一个Netty服务端程序77
  • 5.1.3 业务处理器NettyDiscardHandler79
  • 5.1.4 运行NettyDiscardServer80
  • 5.2 解密Netty中的Reactor模式80
  • 5.2.1 回顾Reactor模式中IO事件的处理流程81
  • 5.2.2 Netty中的Channel81
  • 5.2.3 Netty中的Reactor82
  • 5.2.4 Netty中的Handler83
  • 5.2.5 Netty中的Pipeline84
  • 5.3 详解Bootstrap86
  • 5.3.1 父子通道86
  • 5.3.2 EventLoopGroup87
  • 5.3.3 Bootstrap启动流程88
  • 5.3.4 ChannelOption91
  • 5.4 详解Channel93
  • 5.4.1 Channel的主要成员和方法93
  • 5.4.2 EmbeddedChannel94
  • 5.5 详解Handler95
  • 5.5.1 ChannelInboundHandler入站处理器96
  • 5.5.2 ChannelOutboundHandler出站处理器97
  • 5.5.3 ChannelInitializer通道初始化处理器99
  • 5.5.4 ChannelInboundHandler的生命周期的实战案例99
  • 5.6 详解Pipeline103
  • 5.6.1 Pipeline入站处理流程103
  • 5.6.2 Pipeline出站处理流程104
  • 5.6.3 ChannelHandlerContext106
  • 5.6.4 HeadContext与TailContext107
  • 5.6.5 Pipeline入站和出站的双向链接操作109
  • 5.6.6 截断流水线的入站处理传播过程112
  • 5.6.7 在流水线上热插拔Handler114
  • 5.7 详解ByteBuf117
  • 5.7.1 ByteBuf的优势117
  • 5.7.2 ByteBuf的组成部分117
  • 5.7.3 ByteBuf的重要属性118
  • 5.7.4 ByteBuf的方法118
  • 5.7.5 ByteBuf基本使用的实战案例120
  • 5.7.6 ByteBuf的引用计数122
  • 5.7.7 ByteBuf的分配器124
  • 5.7.8 ByteBuf缓冲区的类型126
  • 5.7.9 两类ByteBuf使用的实战案例127
  • 5.7.10 ByteBuf的自动创建与自动释放130
  • 5.7.11 ByteBuf浅层复制的高级使用方式136
  • 5.8 Netty的零拷贝138
  • 5.8.1 通过CompositeByteBuf实现零拷贝139
  • 5.8.2 通过wrap操作实现零拷贝141
  • 5.9 EchoServer的实战案例142
  • 5.9.1 NettyEchoServer142
  • 5.9.2 NettyEchoServerHandler143
  • 5.9.3 NettyEchoClient144
  • 5.9.4 NettyEchoClientHandler146
  • 第6章 Decoder与Encoder核心组件148
  • 6.1 Decoder原理与实战148
  • 6.1.1 ByteToMessageDecoder解码器处理流程148
  • 6.1.2 自定义Byte2IntegerDecoder整数解码器149
  • 6.1.3 ReplayingDecoder解码器152
  • 6.1.4 整数的分包解码器的实战案例153
  • 6.1.5 字符串的分包解码器的实战案例156
  • 6.1.6 MessageToMessageDecoder解码器161
  • 6.2 常用的内置Decoder161
  • 6.2.1 LineBasedFrameDecoder解码器162
  • 6.2.2 DelimiterBasedFrameDecoder解码器163
  • 6.2.3 LengthFieldBasedFrameDecoder解码器164
  • 6.2.4 多字段Head-Content协议数据包解析的实战案例167
  • 6.3 Encoder原理与实战170
  • 6.3.1 MessageToByteEncoder编码器170
  • 6.3.2 MessageToMessageEncoder编码器171
  • 6.4 解码器和编码器的结合173
  • 6.4.1 ByteToMessageCodec编解码器173
  • 6.4.2 CombinedChannelDuplexHandler组合器174
  • 第7章 序列化与反序列化:JSON和Protobuf176
  • 7.1 详解粘包和拆包177
  • 7.1.1 半包问题的实战案例177
  • 7.1.2 什么是半包问题179
  • 7.1.3 半包问题的根因分析179
  • 7.2 使用JSON协议通信180
  • 7.2.1 JSON的核心优势180
  • 7.2.2 JSON序列化与反序列化开源库181
  • 7.2.3 JSON序列化与反序列化的实战案例182
  • 7.2.4 JSON传输的编码器和解码器184
  • 7.2.5 JSON传输的服务端的实战案例185
  • 7.2.6 JSON传输的客户端的实战案例186
  • 7.3 使用Protobuf协议通信188
  • 7.3.1 一个简单的proto文件的实战案例188
  • 7.3.2 通过控制台命令生成POJO和Builder189
  • 7.3.3 通过Maven插件生成POJO和Builder190
  • 7.3.4 Protobuf序列化与反序列化的实战案例191
  • 7.4 Protobuf编解码的实战案例194
  • 7.4.1 Netty内置的Protobuf基础编码器/解码器194
  • 7.4.2 Protobuf传输的服务端的实战案例195
  • 7.4.3 Protobuf传输的客户端的实战案例197
  • 7.5 详解Protobuf协议语法198
  • 7.5.1 proto文件的头部声明199
  • 7.5.2 Protobuf的消息结构体与消息字段200
  • 7.5.3 Protobuf字段的数据类型201
  • 7.5.4 proto文件的其他语法规范202
  • 第8章 基于Netty单体IM系统的开发实战204
  • 8.1 自定义Protobuf编解码器204
  • 8.1.1 自定义Protobuf编码器205
  • 8.1.2 自定义Protobuf解码器206
  • 8.1.3 IM系统中Protobuf消息格式的设计207
  • 8.2 IM的登录流程209
  • 8.2.1 图解登录/响应流程的环节209
  • 8.2.2 客户端涉及的主要模块210
  • 8.2.3 服务端涉及的主要模块210
  • 8.3 客户端的登录处理的实战案例211
  • 8.3.1 LoginConsoleCommand和User POJO212
  • 8.3.2 LoginSender213
  • 8.3.3 ClientSession216
  • 8.3.4 LoginResponseHandler218
  • 8.3.5 客户端流水线的装配219
  • 8.4 服务端的登录响应的实战案例220
  • 8.4.1 服务端流水线的装配220
  • 8.4.2 LoginRequestHandler221
  • 8.4.3 LoginProcesser223
  • 8.4.4 EventLoop线程和业务线程相互隔离224
  • 8.5 详解Session服务器会话227
  • 8.5.1 通道的容器属性227
  • 8.5.2 ServerSession服务端会话类229
  • 8.5.3 SessionMap会话管理器230
  • 8.6 点对点单聊的实战案例230
  • 8.6.1 单聊的端到端流程231
  • 8.6.2 客户端的ChatConsoleCommand收集聊天内容231
  • 8.6.3 客户端的CommandController发送POJO232
  • 8.6.4 服务端的ChatRedirectHandler进行消息转发233
  • 8.6.5 服务端的ChatRedirectProcesser进行异步消息转发234
  • 8.6.6 客户端的ChatMsgHandler聊天消息处理器235
  • 8.7 详解心跳检测236
  • 8.7.1 网络连接的假死现象236
  • 8.7.2 服务端的空闲检测237
  • 8.7.3 客户端的心跳发送238
  • 第9章 HTTP原理与Web服务器实战241
  • 9.1 高性能Web应用架构241
  • 9.1.1 十万级并发的Web应用架构241
  • 9.1.2 千万级高并发的Web应用架构243
  • 9.2 详解HTTP应用层协议246
  • 9.2.1 HTTP简介247
  • 9.2.2 HTTP的请求URL248
  • 9.2.3 HTTP的请求报文248
  • 9.2.4 HTTP的响应报文251
  • 9.2.5 HTTP中GET和POST的区别254
  • 9.3 HTTP的演进254
  • 9.3.1 HTTP的1.0版本255
  • 9.3.2 HTTP的1.1版本258
  • 9.3.3 HTTP的2.0版本261
  • 9.4 基于Netty实现简单的Web服务器263
  • 9.4.1 基于Netty的HTTP服务器演示实例263
  • 9.4.2 基于Netty的HTTP请求的处理流程264
  • 9.4.3 Netty内置的HTTP报文解码流程266
  • 9.4.4 基于Netty的HTTP响应编码流程268
  • 9.4.5 HttpEchoHandler回显业务处理器的实战案例269
  • 9.4.6 使用Postman发送多种类型的请求体273
  • 第10章 高并发HTTP通信的核心原理278
  • 10.1 需要进行HTTP连接复用的高并发场景278
  • 10.1.1 反向代理Nginx与Java Web应用服务之间的HTTP 高并发通信278
  • 10.1.2 微服务网关与微服务Provider实例之间的HTTP高并发通信279
  • 10.1.3 分布式微服务Provider实例之间的RPC的HTTP高并发通信280
  • 10.1.4 Java通过HTTP客户端访问REST接口服务的HTTP 高并发通信280
  • 10.2 详解传输层TCP281
  • 10.2.1 TCP/IP的分层模型281
  • 10.2.2 HTTP报文传输原理283
  • 10.2.3 TCP的报文格式285
  • 10.2.4 TCP的三次握手288
  • 10.2.5 TCP的四次挥手290
  • 10.2.6 三次握手、四次挥手的常见面试题292
  • 10.3 TCP连接状态的原理与实验293
  • 10.3.1 TCP/IP连接的11种状态293
  • 10.3.2 通过netstat指令查看连接状态295
  • 10.4 HTTP长连接原理297
  • 10.4.1 HTTP长连接和短连接297
  • 10.4.2 不同HTTP版本中的长连接选项298
  • 10.5 服务端HTTP长连接技术299
  • 10.5.1 应用服务器Tomcat的长连接配置299
  • 10.5.2 Nginx承担服务端角色时的长连接配置302
  • 10.5.3 服务端长连接设置的注意事项304
  • 10.6 客户端HTTP长连接技术原理与实验306
  • 10.6.1 HttpURLConnection短连接技术306
  • 10.6.2 HTTP短连接的通信实验309
  • 10.6.3 Apache HttpClient客户端的HTTP长连接技术311
  • 10.6.4 Apache HttpClient客户端长连接实验319
  • 10.6.5 Nginx承担客户端角色时的长连接技术323
  • 第11章 WebSocket原理与实战326
  • 11.1 WebSocket协议简介326
  • 11.1.1 Ajax短轮询和Long Poll长轮询的原理327
  • 11.1.2 WebSocket与HTTP之间的关系327
  • 11.2 WebSocket回显演示程序开发328
  • 11.2.1 WebSocket回显程序的客户端代码328
  • 11.2.2 WebSocket相关的Netty内置处理类331
  • 11.2.3 WebSocket的回显服务器333
  • 11.2.4 WebSocket的业务处理器335
  • 11.3 WebSocket协议通信的原理337
  • 11.3.1 抓取WebSocket协议的本机数据包337
  • 11.3.2 WebSocket 握手过程338
  • 11.3.3 WebSocket通信报文格式341
  • 第12章 SSL/TLS核心原理与实战344
  • 12.1 什么是SSL/TLS344
  • 12.1.1 SSL/TLS协议的版本演进344
  • 12.1.2 SSL/TLS协议的分层结构346
  • 12.2 加密算法原理与实战347
  • 12.2.1 哈希单向加密算法原理与实战347
  • 12.2.2 对称加密算法原理与实战349
  • 12.2.3 非对称加密算法原理与实战351
  • 12.2.4 数字签名原理与实战356
  • 12.3 SSL/TLS运行过程361
  • 12.3.1 SSL/TLS第一阶段握手361
  • 12.3.2 SSL/TLS第二阶段握手363
  • 12.3.3 SSL/TLS第三阶段握手367
  • 12.3.4 SSL/TLS第四阶段握手369
  • 12.4 详解Keytool工具370
  • 12.4.1 数字证书与身份识别370
  • 12.4.2 存储密钥与证书文件格式373
  • 12.4.3 使用Keytool工具管理密钥和证书374
  • 12.5 使用Java程序管理密钥与证书377
  • 12.5.1 使用Java操作数据证书所涉及的核心类378
  • 12.5.2 使用Java程序创建密钥与仓库378
  • 12.5.3 使用Java程序导出证书文件383
  • 12.5.4 使用Java程序将数字证书导入信任仓库385
  • 12.6 OIO通信中的SSL/TLS使用实战389
  • 12.6.1 JSSE安全套接字扩展核心类390
  • 12.6.2 JSSE安全套接字的创建过程391
  • 12.6.3 OIO安全通信的Echo服务端实战393
  • 12.6.4 OIO安全通信的Echo客户端实战395
  • 12.7 单向认证与双向认证396
  • 12.7.1 SSL/TLS 单向认证396
  • 12.7.2 使用证书信任管理器399
  • 12.7.3 SSL/TLS 双向认证402
  • 12.8 Netty通信中的SSL/TLS使用实战405
  • 12.8.1 Netty安全通信演示实例405
  • 12.8.2 Netty内置SSLEngine处理器详解406
  • 12.8.3 Netty的简单安全聊天器服务端程序409
  • 12.9 HTTPS协议安全通信实战412
  • 12.9.1 使用Netty实现HTTPS回显服务端程序412
  • 12.9.2 通过HttpsURLConnection发送HTTPS请求414
  • 12.9.3 HTTPS服务端与客户端的测试用例415
  • 第13章 ZooKeeper分布式协调417
  • 13.1 ZooKeeper伪集群安装和配置417
  • 13.1.1 创建数据目录和日志目录417
  • 13.1.2 创建myid文本文件419
  • 13.1.3 创建和修改配置文件419
  • 13.1.4 配置文件示例421
  • 13.1.5 启动ZooKeeper伪集群422
  • 13.2 使用ZooKeeper 进行分布式存储423
  • 13.2.1 详解ZooKeeper存储模型424
  • 13.2.2 zkCli客户端指令清单424
  • 13.3 ZooKeeper应用开发实战426
  • 13.3.1 ZkClient开源客户端427
  • 13.3.2 Curator开源客户端427
  • 13.3.3 准备Curator开发环境428
  • 13.3.4 创建Curator客户端实例429
  • 13.3.5 通过Curator创建节点431
  • 13.3.6 通过Curator读取节点432
  • 13.3.7 通过Curator更新节点433
  • 13.3.8 通过Curator删除节点435
  • 13.4 分布式命名服务实战436
  • 13.4.1 ID生成器437
  • 13.4.2 ZooKeeper分布式ID生成器的实战案例438
  • 13.4.3 集群节点的命名服务的实战案例440
  • 13.4.4 结合ZooKeeper实现SnowFlake ID算法442
  • 13.5 分布式事件监听的重点447
  • 13.5.1 Watcher标准的事件处理器448
  • 13.5.2 NodeCache节点缓存的监听451
  • 13.5.3 PathCache子节点监听454
  • 13.5.4 TreeCache节点树缓存457
  • 13.6 分布式锁原理与实战461
  • 13.6.1 公平锁和可重入锁的原理461
  • 13.6.2 ZooKeeper分布式锁的原理463
  • 13.6.3 分布式锁的基本流程464
  • 13.6.4 加锁的实现465
  • 13.6.5 释放锁的实现471
  • 13.6.6 分布式锁的使用472
  • 13.6.7 Curator的InterProcessMutex可重入锁473
  • 13.6.8 ZooKeeper分布式锁的优缺点474
  • 第14章 分布式缓存Redis实战476
  • 14.1 Redis入门476
  • 14.1.1 Redis的安装和配置476
  • 14.1.2 Redis客户端命令479
  • 14.1.3 Redis键的命名规范480
  • 14.2 Redis数据类型481
  • 14.2.1 String481
  • 14.2.2 List482
  • 14.2.3 Hash484
  • 14.2.4 Set485
  • 14.2.5 ZSet486
  • 14.3 Jedis基础编程的实战案例487
  • 14.3.1 Jedis操作String488
  • 14.3.2 Jedis操作List490
  • 14.3.3 Jedis操作Hash491
  • 14.3.4 Jedis操作Set493
  • 14.3.5 Jedis操作ZSet494
  • 14.4 JedisPool连接池的实战案例497
  • 14.4.1 JedisPool的配置497
  • 14.4.2 JedisPool的创建和预热499
  • 14.4.3 JedisPool的使用501
  • 14.5 使用spring-data-redis完成CRUD的实战案例502
  • 14.5.1 CRUD中应用缓存的场景502
  • 14.5.2 配置spring-redis.xml504
  • 14.5.3 RedisTemplate模板API506
  • 14.5.4 使用RedisTemplate模板API完成CRUD的实战案例509
  • 14.5.5 使用RedisCallback回调完成CRUD的实战案例511
  • 14.6 Spring的Redis缓存注解513
  • 14.6.1 使用Spring缓存注解完成CRUD的实战案例514
  • 14.6.2 spring-redis.xml中配置的调整515
  • 14.6.3 @CachePut和@Cacheable注解517
  • 14.6.4 @CacheEvict注解518
  • 14.6.5 @Caching组合注解519
  • 14.7 详解SpEL520
  • 14.7.1 SpEL运算符521
  • 14.7.2 缓存注解中的SpEL表达式524
  • 第15章 亿级高并发IM架构与实战526
  • 15.1 支撑亿级流量的高并发IM架构的理论基础526
  • 15.1.1 亿级流量的系统架构的开发实战527
  • 15.1.2 高并发架构的技术选型527
  • 15.1.3 详解IM消息的序列化协议选型528
  • 15.1.4 详解长连接和短连接528
  • 15.2 分布式IM的命名服务的实战案例529
  • 15.2.1 IM节点的POJO类530
  • 15.2.2 IM节点的ImWorker类531
  • 15.3 Worker集群的负载均衡的实战案例534
  • 15.3.1 ImLoadBalance负载均衡器535
  • 15.3.2 与WebGate的整合537
  • 15.4 即时通信消息的路由和转发的实战案例538
  • 15.4.1 IM路由器WorkerRouter538
  • 15.4.2 IM转发器PeerSender541
  • 15.5 在线用户统计的实战案例543
  • 15.5.1 Curator的分布式计数器543
  • 15.5.2 用户上线和下线的统计545

资源下载

资源下载地址1:https://pan.baidu.com/s/1dCF_KcKtHmWDKu2n_ATFKw

相关资源

网友留言