本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
内容简介
本书从操作系统底层的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章 高并发时代的*备技能 11.1 Netty为何这么火 11.1.1 Netty火热的程度 11.1.2 Netty是面试的必杀器 21.2 高并发利器Redis 21.2.1 什么是Redis 21.2.2 Redis成为缓存事实标准的原因 31.3 分布式利器ZooKeeper 31.3.1 什么是ZooKeeper 31.3.2 ZooKeeper的优势 41.4 高性能HTTP通信技术 41.4.1 十万级以上高并发场景中的高并发HTTP通信技术 51.4.2 微服务之间的高并发RPC技术 61.5 高并发IM的综合实战 71.5.1 高并发IM的学习价值 81.5.2 庞大的应用场景 8*2章 高并发IO的底层原理 102.1 IO读写的基本原理 102.1.1 内核缓冲区与进程缓冲区 112.1.2 典型的系统调用流程 112.2 四种主要的IO模型 132.2.1 同步阻塞IO 142.2.2 同步非阻塞IO 152.2.3 IO多路复用 162.2.4 异步IO 172.3 通过合理配置来支持百*级并发连接 18第3章 Java NIO核心详解 213.1 Java NIO简介 213.1.1 NIO和OIO的对比 213.1.2 通道 223.1.3 选择器 223.1.4 缓冲区 233.2 详解NIO Buffer类及其属性 233.2.1 Buffer类 233.2.2 Buffer类的重要属性 233.3 详解NIO Buffer类的重要方法 263.3.1 allocate() 263.3.2 put() 273.3.3 flip() 273.3.4 get() 293.3.5 rewind() 303.3.6 mark()和reset() 323.3.7 clear() 333.3.8 使用Buffer类的基本步骤 343.4 详解NIO Channel类 343.4.1 FileChannel 353.4.2 使用FileChannel完成文件复制的实战案例 373.4.3 SocketChannel 393.4.4 使用SocketChannel发送文件的实战案例 413.4.5 DatagramChannel 433.4.6 使用DatagramChannel发送数据的实战案例 453.5 详解NIO Selector 473.5.1 选择器与注册 473.5.2 SelectableChannel 483.5.3 SelectionKey 483.5.4 选择器使用流程 483.5.5 使用NIO实现Discard服务器的实战案例 503.5.6 使用SocketChannel在服务端接收文件的实战案例 53第4章 鼎鼎大名的Reactor模式 594.1 Reactor模式的重要性 594.1.1 为什么首先学习Reactor模式 594.1.2 Reactor模式简介 604.1.3 多线程OIO的致命缺陷 604.2 单线程Reactor模式 624.2.1 什么是单线程Reactor 624.2.2 单线程Reactor的参考代码 634.2.3 单线程Reactor模式的EchoServer的实战案例 664.2.4 单线程Reactor模式的缺点 694.3 多线程Reactor模式 694.3.1 多线程版本的Reactor模式演进 694.3.2 多线程版本Reactor的实战案例 694.3.3 多线程版本Handler的实战案例 724.4 Reactor模式的优缺点 74第5章 Netty核心原理与基础实战 765.1 *一个Netty实战案例DiscardServer 765.1.1 创建*一个Netty项目 765.1.2 *一个Netty服务端程序 775.1.3 业务处理器NettyDiscardHandler 795.1.4 运行NettyDiscardServer 805.2 解密Netty中的Reactor模式 805.2.1 回顾Reactor模式中IO事件的处理流程 815.2.2 Netty中的Channel 815.2.3 Netty中的Reactor 825.2.4 Netty中的Handler 835.2.5 Netty中的Pipeline 845.3 详解Bootstrap 865.3.1 父子通道 865.3.2 EventLoopGroup 875.3.3 Bootstrap启动流程 885.3.4 ChannelOption 915.4 详解Channel 935.4.1 Channel的主要成员和方法 935.4.2 EmbeddedChannel 945.5 详解Handler 955.5.1 ChannelInboundHandler入站处理器 965.5.2 ChannelOutboundHandler出站处理器 975.5.3 ChannelInitializer通道初始化处理器 995.5.4 ChannelInboundHandler的生命周期的实战案例 995.6 详解Pipeline 1035.6.1 Pipeline入站处理流程 1035.6.2 Pipeline出站处理流程 1045.6.3 ChannelHandlerContext 1065.6.4 HeadContext与TailContext 1075.6.5 Pipeline入站和出站的双向链接操作 1095.6.6 截断流水线的入站处理传播过程 1125.6.7 在流水线上热插拔Handler 1145.7 详解ByteBuf 1175.7.1 ByteBuf的优势 1175.7.2 ByteBuf的组成部分 1175.7.3 ByteBuf的重要属性 1185.7.4 ByteBuf的方法 1185.7.5 ByteBuf基本使用的实战案例 1205.7.6 ByteBuf的引用计数 1225.7.7 ByteBuf的分配器 1245.7.8 ByteBuf缓冲区的类型 1265.7.9 两类ByteBuf使用的实战案例 1275.7.10 ByteBuf的自动创建与自动释放 1305.7.11 ByteBuf浅层复制的*级使用方式 1365.8 Netty的零拷贝 1385.8.1 通过CompositeByteBuf实现零拷贝 1395.8.2 通过wrap操作实现零拷贝 1415.9 EchoServer的实战案例 1425.9.1 NettyEchoServer 1425.9.2 NettyEchoServerHandler 1435.9.3 NettyEchoClient 1445.9.4 NettyEchoClientHandler 146第6章 Decoder与Encoder核心组件 1486.1 Decoder原理与实战 1486.1.1 ByteToMessageDecoder解码器处理流程 1486.1.2 自定义Byte2IntegerDecoder整数解码器 1496.1.3 ReplayingDecoder解码器 1526.1.4 整数的分包解码器的实战案例 1536.1.5 字符串的分包解码器的实战案例 1566.1.6 MessageToMessageDecoder解码器 1616.2 常用的内置Decoder 1616.2.1 LineBasedFrameDecoder解码器 1626.2.2 DelimiterBasedFrameDecoder解码器 1636.2.3 LengthFieldBasedFrameDecoder解码器 1646.2.4 多字段Head-Content协议数据包解析的实战案例 1676.3 Encoder原理与实战 1706.3.1 MessageToByteEncoder编码器 1706.3.2 MessageToMessageEncoder编码器 1716.4 解码器和编码器的结合 1736.4.1 ByteToMessageCodec编解码器 1736.4.2 CombinedChannelDuplexHandler组合器 174第7章 序列化与反序列化:JSON和Protobuf 1767.1 详解粘包和拆包 1777.1.1 半包问题的实战案例 1777.1.2 什么是半包问题 1797.1.3 半包问题的根因分析 1797.2 使用JSON协议通信 1807.2.1 JSON的核心优势 1807.2.2 JSON序列化与反序列化开源库 1817.2.3 JSON序列化与反序列化的实战案例 1827.2.4 JSON传输的编码器和解码器 1847.2.5 JSON传输的服务端的实战案例 1857.2.6 JSON传输的客户端的实战案例 1867.3 使用Protobuf协议通信 1887.3.1 一个简单的proto文件的实战案例 1887.3.2 通过控制台命令生成POJO和Builder 1897.3.3 通过Maven插件生成POJO和Builder 1907.3.4 Protobuf序列化与反序列化的实战案例 1917.4 Protobuf编解码的实战案例 1947.4.1 Netty内置的Protobuf基础编码器/解码器 1947.4.2 Protobuf传输的服务端的实战案例 1957.4.3 Protobuf传输的客户端的实战案例 1977.5 详解Protobuf协议语法 1987.5.1 proto文件的头部声明 1997.5.2 Protobuf的消息结构体与消息字段 2007.5.3 Protobuf字段的数据类型 2017.5.4 proto文件的其他语法规范 202第8章 基于Netty单体IM系统的开发实战 2048.1 自定义Protobuf编解码器 2048.1.1 自定义Protobuf编码器 2058.1.2 自定义Protobuf解码器 2068.1.3 IM系统中Protobuf消息格式的设计 2078.2 IM的登录流程 2098.2.1 图解登录/响应流程的环节 2098.2.2 客户端涉及的主要模块 2108.2.3 服务端涉及的主要模块 2108.3 客户端的登录处理的实战案例 2118.3.1 LoginConsoleCommand和User POJO 2128.3.2 LoginSender 2138.3.3 ClientSession 2168.3.4 LoginResponseHandler 2188.3.5 客户端流水线的装配 2198.4 服务端的登录响应的实战案例 2208.4.1 服务端流水线的装配 2208.4.2 LoginRequestHandler 2218.4.3 LoginProcesser 2238.4.4 EventLoop线程和业务线程相互隔离 2248.5 详解Session服务器会话 2278.5.1 通道的容器属性 2278.5.2 ServerSession服务端会话类 2298.5.3 SessionMap会话管理器 2308.6 点对点单聊的实战案例 2308.6.1 单聊的端到端流程 2318.6.2 客户端的ChatConsoleCommand收集聊天内容 2318.6.3 客户端的CommandController发送POJO 2328.6.4 服务端的ChatRedirectHandler进行消息转发 2338.6.5 服务端的ChatRedirectProcesser进行异步消息转发 2348.6.6 客户端的ChatMsgHandler聊天消息处理器 2358.7 详解心跳检测 2368.7.1 网络连接的假死现象 2368.7.2 服务端的空闲检测 2378.7.3 客户端的心跳发送 238第9章 HTTP原理与Web服务器实战 2419.1 高性能Web应用架构 2419.1.1 十万级并发的Web应用架构 2419.1.2 千*级高并发的Web应用架构 2439.2 详解HTTP应用层协议 2469.2.1 HTTP简介 2479.2.2 HTTP的请求URL 2489.2.3 HTTP的请求报文 2489.2.4 HTTP的响应报文 2519.2.5 HTTP中GET和POST的区别 2549.3 HTTP的演进 2549.3.1 HTTP的1.0版本 2559.3.2 HTTP的1.1版本 2589.3.3 HTTP的2.0版本 2619.4 基于Netty实现简单的Web服务器 2639.4.1 基于Netty的HTTP服务器演示实例 2639.4.2 基于Netty的HTTP请求的处理流程 2649.4.3 Netty内置的HTTP报文解码流程 2669.4.4 基于Netty的HTTP响应编码流程 2689.4.5 HttpEchoHandler回显业务处理器的实战案例 2699.4.6 使用Postman发送多种类型的请求体 273*10章 高并发HTTP通信的核心原理 27810.1 需要进行HTTP连接复用的高并发场景 27810.1.1 反向代理Nginx与Java Web应用服务之间的HTTP 高并发通信 27810.1.2 微服务网关与微服务Provider实例之间的HTTP高并发通信 27910.1.3 分布式微服务Provider实例之间的RPC的HTTP高并发通信 28010.1.4 Java通过HTTP客户端访问REST接口服务的HTTP 高并发通信 28010.2 详解传输层TCP 28110.2.1 TCP/IP的分层模型 28110.2.2 HTTP报文传输原理 28310.2.3 TCP的报文格式 28510.2.4 TCP的三次握手 28810.2.5 TCP的四次挥手 29010.2.6 三次握手、四次挥手的常见面试题 29210.3 TCP连接状态的原理与实验 29310.3.1 TCP/IP连接的11种状态 29310.3.2 通过netstat指令查看连接状态 29510.4 HTTP长连接原理 29710.4.1 HTTP长连接和短连接 29710.4.2 不同HTTP版本中的长连接选项 29810.5 服务端HTTP长连接技术 29910.5.1 应用服务器Tomcat的长连接配置 29910.5.2 Nginx承担服务端角色时的长连接配置 30210.5.3 服务端长连接设置的注意事项 30410.6 客户端HTTP长连接技术原理与实验 30610.6.1 HttpURLConnection短连接技术 30610.6.2 HTTP短连接的通信实验 30910.6.3 Apache HttpClient客户端的HTTP长连接技术 31110.6.4 Apache HttpClient客户端长连接实验 31910.6.5 Nginx承担客户端角色时的长连接技术 323*11章 WebSocket原理与实战 32611.1 WebSocket协议简介 32611.1.1 Ajax短轮询和Long Poll长轮询的原理 32711.1.2 WebSocket与HTTP之间的关系 32711.2 WebSocket回显演示程序开发 32811.2.1 WebSocket回显程序的客户端代码 32811.2.2 WebSocket相关的Netty内置处理类 33111.2.3 WebSocket的回显服务器 33311.2.4 WebSocket的业务处理器 33511.3 WebSocket协议通信的原理 33711.3.1 抓取WebSocket协议的本机数据包 33711.3.2 WebSocket 握手过程 33811.3.3 WebSocket通信报文格式 341*12章 SSL/TLS核心原理与实战 34412.1 什么是SSL/TLS 34412.1.1 SSL/TLS协议的版本演进 34412.1.2 SSL/TLS协议的分层结构 34612.2 加密算法原理与实战 34712.2.1 哈希单向加密算法原理与实战 34712.2.2 对称加密算法原理与实战 34912.2.3 非对称加密算法原理与实战 35112.2.4 数字签名原理与实战 35612.3 SSL/TLS运行过程 36112.3.1 SSL/TLS*一阶段握手 36112.3.2 SSL/TLS*二阶段握手 36312.3.3 SSL/TLS第三阶段握手 36712.3.4 SSL/TLS第四阶段握手 36912.4 详解Keytool工具 37012.4.1 数字证书与身份识别 37012.4.2 存储密钥与证书文件格式 37312.4.3 使用Keytool工具管理密钥和证书 37412.5 使用Java程序管理密钥与证书 37712.5.1 使用Java操作数据证书所涉及的核心类 37812.5.2 使用Java程序创建密钥与仓库 37812.5.3 使用Java程序导出证书文件 38312.5.4 使用Java程序将数字证书导入信任仓库 38512.6 OIO通信中的SSL/TLS使用实战 38912.6.1 JSSE安全套接字扩展核心类 39012.6.2 JSSE安全套接字的创建过程 39112.6.3 OIO安全通信的Echo服务端实战 39312.6.4 OIO安全通信的Echo客户端实战 39512.7 单向认证与双向认证 39612.7.1 SSL/TLS 单向认证 39612.7.2 使用证书信任管理器 39912.7.3 SSL/TLS 双向认证 40212.8 Netty通信中的SSL/TLS使用实战 40512.8.1 Netty安全通信演示实例 40512.8.2 Netty内置SSLEngine处理器详解 40612.8.3 Netty的简单安全聊天器服务端程序 40912.9 HTTPS协议安全通信实战 41212.9.1 使用Netty实现HTTPS回显服务端程序 41212.9.2 通过HttpsURLConnection发送HTTPS请求 41412.9.3 HTTPS服务端与客户端的测试用例 415*13章 ZooKeeper分布式协调 41713.1 ZooKeeper伪集群安装和配置 41713.1.1 创建数据目录和日志目录 41713.1.2 创建myid文本文件 41913.1.3 创建和修改配置文件 41913.1.4 配置文件示例 42113.1.5 启动ZooKeeper伪集群 42213.2 使用ZooKeeper 进行分布式存储 42313.2.1 详解ZooKeeper存储模型 42413.2.2 zkCli客户端指令清单 42413.3 ZooKeeper应用开发实战 42613.3.1 ZkClient开源客户端 42713.3.2 Curator开源客户端 42713.3.3 准备Curator开发环境 42813.3.4 创建Curator客户端实例 42913.3.5 通过Curator创建节点 43113.3.6 通过Curator读取节点 43213.3.7 通过Curator更新节点 43313.3.8 通过Curator删除节点 43513.4 分布式命名服务实战 43613.4.1 ID生成器 43713.4.2 ZooKeeper分布式ID生成器的实战案例 43813.4.3 集群节点的命名服务的实战案例 44013.4.4 结合ZooKeeper实现SnowFlake ID算法 44213.5 分布式事件监听的重点 44713.5.1 Watcher标准的事件处理器 44813.5.2 NodeCache节点缓存的监听 45113.5.3 PathCache子节点监听 45413.5.4 TreeCache节点树缓存 45713.6 分布式锁原理与实战 46113.6.1 公平锁和可重入锁的原理 46113.6.2 ZooKeeper分布式锁的原理 46313.6.3 分布式锁的基本流程 46413.6.4 加锁的实现 46513.6.5 释放锁的实现 47113.6.6 分布式锁的使用 47213.6.7 Curator的InterProcessMutex可重入锁 47313.6.8 ZooKeeper分布式锁的优缺点 474*14章 分布式缓存Redis实战 47614.1 Redis入门 47614.1.1 Redis的安装和配置 47614.1.2 Redis客户端命令 47914.1.3 Redis键的命名规范 48014.2 Redis数据类型 48114.2.1 String 48114.2.2 List 48214.2.3 Hash 48414.2.4 Set 48514.2.5 ZSet 48614.3 Jedis基础编程的实战案例 48714.3.1 Jedis操作String 48814.3.2 Jedis操作List 49014.3.3 Jedis操作Hash 49114.3.4 Jedis操作Set 49314.3.5 Jedis操作ZSet 49414.4 JedisPool连接池的实战案例 49714.4.1 JedisPool的配置 49714.4.2 JedisPool的创建和预热 49914.4.3 JedisPool的使用 50114.5 使用spring-data-redis完成CRUD的实战案例 50214.5.1 CRUD中应用缓存的场景 50214.5.2 配置spring-redis.xml 50414.5.3 RedisTemplate模板API 50614.5.4 使用RedisTemplate模板API完成CRUD的实战案例 50914.5.5 使用RedisCallback回调完成CRUD的实战案例 51114.6 Spring的Redis缓存注解 51314.6.1 使用Spring缓存注解完成CRUD的实战案例 51414.6.2 spring-redis.xml中配置的调整 51514.6.3 @CachePut和@Cacheable注解 51714.6.4 @CacheEvict注解 51814.6.5 @Caching组合注解 51914.7 详解SpEL 52014.7.1 SpEL运算符 52114.7.2 缓存注解中的SpEL表达式 524*15章 亿级高并发IM架构与实战 52615.1 支撑亿级流量的高并发IM架构的理论基础 52615.1.1 亿级流量的系统架构的开发实战 52715.1.2 高并发架构的技术选型 52715.1.3 详解IM消息的序列化协议选型 52815.1.4 详解长连接和短连接 52815.2 分布式IM的命名服务的实战案例 52915.2.1 IM节点的POJO类 53015.2.2 IM节点的ImWorker类 53115.3 Worker集群的负载均衡的实战案例 53415.3.1 ImLoadBalance负载均衡器 53515.3.2 与WebGate的整合 53715.4 即时通信消息的路由和转发的实战案例 53815.4.1 IM路由器WorkerRouter 53815.4.2 IM转发器PeerSender 54115.5 在线用户统计的实战案例 54315.5.1 Curator的分布式计数器 54315.5.2 用户上线和下线的统计 545