塞IO15
2.2.3IO多路复用16
2.2.4异步IO17
2.3通过合理配置来支持百万级并发连接18
第3章JavaNIO核心详解21
3.1JavaNIO简介21
3.1.1NIO和OIO的对比21
3.1.2通道22
3.1.3选择器22
3.1.4缓冲区23
3.2详解NIOBuffer类及其属性23
3.2.1Buffer类23
3.2.2Buffer类的重要属性23
3.3详解NIOBuffer类的重要方法26
3.3.1allocate()26
3.3.2put()27
3.3.3flip()27
3.3.4get()29
3.3.5rewind()30
3.3.6mark()和reset()32
3.3.7clear()33
3.3.8使用Buffer类的基本步骤34
3.4详解NIOChannel类34
3.4.1FileChannel35
3.4.2使用FileChannel完成文件复制的实战案例37
3.4.3SocketChannel39
3.4.4使用SocketChannel发送文件的实战案例41
3.4.5DatagramChannel43
3.4.6使用DatagramChannel发送数据的实战案例45
3.5详解NIOSelector47
3.5.1选择器与注册47
3.5.2SelectableChannel48
3.5.3SelectionKey48
3.5.4选择器使用流程48
3.5.5使用NIO实现Discard服务器的实战案例50
3.5.6使用SocketChannel在服务端接收文件的实战案例53
第4章鼎鼎大名的Reactor模式59
4.1Reactor模式的重要性59
4.1.1为什么首先学习Reactor模式59
4.1.2Reactor模式简介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.4Reactor模式的优缺点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.2Netty中的Channel81
5.2.3Netty中的Reactor82
5.2.4Netty中的Handler83
5.2.5Netty中的Pipeline84
5.3详解Bootstrap86
5.3.1父子通道86
5.3.2EventLoopGroup87
5.3.3Bootstrap启动流程88
5.3.4ChannelOption91
5.4详解Channel93
5.4.1Channel的主要成员和方法93
5.4.2EmbeddedChannel94
5.5详解Handler95
5.5.1ChannelInboundHandler入站处理器96
5.5.2ChannelOutboundHandler出站处理器97
5.5.3ChannelInitializer通道初始化处理器99
5.5.4ChannelInboundHandler的生命周期的实战案例99
5.6详解Pipeline103
5.6.1Pipeline入站处理流程103
5.6.2Pipeline出站处理流程104
5.6.3ChannelHandlerContext106
5.6.4HeadContext与TailContext107
5.6.5Pipeline入站和出站的双向链接操作109
5.6.6截断流水线的入站处理传播过程112
5.6.7在流水线上热插拔Handler114
5.7详解ByteBuf117
5.7.1ByteBuf的优势117
5.7.2ByteBuf的组成部分117
5.7.3ByteBuf的重要属性118
5.7.4ByteBuf的方法118
5.7.5ByteBuf基本使用的实战案例120
5.7.6ByteBuf的引用计数122
5.7.7ByteBuf的分配器124
5.7.8ByteBuf缓冲区的类型126
5.7.9两类ByteBuf使用的实战案例127
5.7.10ByteBuf的自动创建与自动释放130
5.7.11ByteBuf浅层复制的高级使用方式136
5.8Netty的零拷贝138
5.8.1通过CompositeByteBuf实现零拷贝139
5.8.2通过wrap操作实现零拷贝141
5.9EchoServer的实战案例142
5.9.1NettyEchoServer142
5.9.2NettyEchoServerHandler143
5.9.3NettyEchoClient144
5.9.4NettyEchoClientHandler146
第6章Decoder与Encoder核心组件148
6.1Decoder原理与实战148
6.1.1ByteToMessageDecoder解码器处理流程148
6.1.2自定义Byte2IntegerDecoder整数解码器149
6.1.3ReplayingDecoder解码器152
6.1.4整数的分包解码器的实战案例153
6.1.5字符串的分包解码器的实战案例156
6.1.6MessageToMessageDecoder解码器161
6.2常用的内置Decoder161
6.2.1LineBasedFrameDecoder解码器162
6.2.2DelimiterBasedFrameDecoder解码器163
6.2.3LengthFieldBasedFrameDecoder解码器164
6.2.4多字段Head-Content协议数据包解析的实战案例167
6.3Encoder原理与实战170
6.3.1MessageToByteEncoder编码器170
6.3.2MessageToMessageEncoder编码器171
6.4解码器和编码器的结合173
6.4.1ByteToMessageCodec编解码器173
6.4.2CombinedChannelDuplexHandler组合器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.1JSON的核心优势180
7.2.2JSON序列化与反序列化开源库181
7.2.3JSON序列化与反序列化的实战案例182
7.2.4JSON传输的编码器和解码器184
7.2.5JSON传输的服务端的实战案例185
7.2.6JSON传输的客户端的实战案例186
7.3使用Protobuf协议通信188
7.3.1一个简单的proto文件的实战案例188
7.3.2通过控制台命令生成POJO和Builder189
7.3.3通过Maven插件生成POJO和Builder190
7.3.4Protobuf序列化与反序列化的实战案例191
7.4Protobuf编解码的实战案例194
7.4.1Netty内置的Protobuf基础编码器/解码器194
7.4.2Protobuf传输的服务端的实战案例195
7.4.3Protobuf传输的客户端的实战案例197
7.5详解Protobuf协议语法198
7.5.1proto文件的头部声明199
7.5.2Protobuf的消息结构体与消息字段200
7.5.3Protobuf字段的数据类型201
7.5.4proto文件的其他语法规范202
第8章基于Netty单体IM系统的开发实战204
8.1自定义Protobuf编解码器204
8.1.1自定义Protobuf编码器205
8.1.2自定义Protobuf解码器206
8.1.3IM系统中Protobuf消息格式的设计207
8.2IM的登录流程209
8.2.1图解登录/响应流程的环节209
8.2.2客户端涉及的主要模块210
8.2.3服务端涉及的主要模块210
8.3客户端的登录处理的实战案例211
8.3.1LoginConsoleCommand和UserPOJO212
8.3.2LoginSender213
8.3.3ClientSession216
8.3.4LoginResponseHandler218
8.3.5客户端流水线的装配219
8.4服务端的登录响应的实战案例220
8.4.1服务端流水线的装配220
8.4.2LoginRequestHandler221
8.4.3LoginProcesser223
8.4.4EventLoop线程和业务线程相互隔离224
8.5详解Session服务器会话227
8.5.1通道的容器属性227
8.5.2ServerSession服务端会话类229
8.5.3SessionMap会话管理器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.1HTTP简介247
9.2.2HTTP的请求URL248
9.2.3HTTP的请求报文248
9.2.4HTTP的响应报文251
9.2.5HTTP中GET和POST的区别254
9.3HTTP的演进254
9.3.1HTTP的1.0版本255
9.3.2HTTP的1.1版本258
9.3.3HTTP的2.0版本261
9.4基于Netty实现简单的Web服务器263
9.4.1基于Netty的HTTP服务器演示实例263
9.4.2基于Netty的HTTP请求的处理流程264
9.4.3Netty内置的HTTP报文解码流程266
9.4.4基于Netty的HTTP响应编码流程268
9.4.5HttpEchoHandler回显业务处理器的实战案例269
9.4.6使用Postman发送多种类型的请求体273
第10章高并发HTTP通信的核心原理278
10.1需要进行HTTP连接复用的高并发场景278
10.1.1反向代理Nginx与JavaWeb应用服务之间的HTTP高并发通信278
10.1.2微服务网关与微服务Provider实例之间的HTTP高并发通信279
10.1.3分布式微服务Provider实例之间的RPC的HTTP高并发通信280
10.1.4Java通过HTTP客户端访问REST接口服务的HTTP高并发通信280
10.2详解传输层TCP281
10.2.1TCP/IP的分层模型281
10.2.2HTTP报文传输原理283
10.2.3TCP的报文格式285
10.2.4TCP的三次握手288
10.2.5TCP的四次挥手290
10.2.6三次握手、四次挥手的常见面试题292
10.3TCP连接状态的原理与实验293
10.3.1TCP/IP连接的11种状态293
10.3.2通过netstat指令查看连接状态295
10.4HTTP长连接原理297
10.4.1HTTP长连接和短连接297
10.4.2不同HTTP版本中的长连接选项298
10.5服务端HTTP长连接技术299
10.5.1应用服务器Tomcat的长连接配置299
10.5.2Nginx承担服务端角色时的长连接配置302
10.5.3服务端长连接设置的注意事项304
10.6客户端HTTP长连接技术原理与实验306
10.6.1HttpURLConnection短连接技术306
10.6.2HTTP短连接的通信实验309
10.6.3ApacheHttpClient客户端的HTTP长连接技术311
10.6.4ApacheHttpClient客户端长连接实验319
10.6.5Nginx承担客户端角色时的长连接技术323
第11章WebSocket原理与实战326
11.1WebSocket协议简介326
11.1.1Ajax短轮询和LongPoll长轮询的原理327
11.1.2WebSocket与HTTP之间的关系327
11.2WebSocket回显演示程序开发328
11.2.1WebSocket回显程序的客户端代码328
11.2.2WebSocket相关的Netty内置处理类331
11.2.3WebSocket的回显服务器333
11.2.4WebSocket的业务处理器335
11.3WebSocket协议通信的原理337
11.3.1抓取WebSocket协议的本机数据包337
11.3.2WebSocket握手过程338
11.3.3WebSocket通信报文格式341
第12章SSL/TLS核心原理与实战344
12.1什么是SSL/TLS344
12.1.1SSL/TLS协议的版本演进344
12.1.2SSL/TLS协议的分层结构346
12.2加密算法原理与实战347
12.2.1哈希单向加密算法原理与实战347
12.2.2对称加密算法原理与实战349
12.2.3非对称加密算法原理与实战351
12.2.4数字签名原理与实战356
12.3SSL/TLS运行过程361
12.3.1SSL/TLS第一阶段握手361
12.3.2SSL/TLS第二阶段握手363
12.3.3SSL/TLS第三阶段握手367
12.3.4SSL/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.6OIO通信中的SSL/TLS使用实战389
12.6.1JSSE安全套接字扩展核心类390
12.6.2JSSE安全套接字的创建过程391
12.6.3OIO安全通信的Echo服务端实战393
12.6.4OIO安全通信的Echo客户端实战395
12.7单向认证与双向认证396
12.7.1SSL/TLS单向认证396
12.7.2使用证书信任管理器399
12.7.3SSL/TLS双向认证402
12.8Netty通信中的SSL/TLS使用实战405
12.8.1Netty安全通信演示实例405
12.8.2Netty内置SSLEngine处理器详解406
12.8.3Netty的简单安全聊天器服务端程序409
12.9HTTPS协议安全通信实战412
12.9.1使用Netty实现HTTPS回显服务端程序412
12.9.2通过HttpsURLConnection发送HTTPS请求414
12.9.3HTTPS服务端与客户端的测试用例415
第13章ZooKeeper分布式协调417
13.1ZooKeeper伪集群安装和配置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.2zkCli客户端指令清单424
13.3ZooKeeper应用开发实战426
13.3.1ZkClient开源客户端427
13.3.2Curator开源客户端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.1ID生成器437
13.4.2ZooKeeper分布式ID生成器的实战案例438
13.4.3集群节点的命名服务的实战案例440
13.4.4结合ZooKeeper实现SnowFlakeID算法442
13.5分布式事件监听的重点447
13.5.1Watcher标准的事件处理器448
13.5.2NodeCache节点缓存的监听451
13.5.3PathCache子节点监听454
13.5.4TreeCache节点树缓存457
13.6分布式锁原理与实战461
13.6.1公平锁和可重入锁的原理461
13.6.2ZooKeeper分布式锁的原理463
13.6.3分布式锁的基本流程464
13.6.4加锁的实现465
13.6.5释放锁的实现471
13.6.6分布式锁的使用472
13.6.7Curator的InterProcessMutex可重入锁473
13.6.8ZooKeeper分布式锁的优缺点474
第14章分布式缓存Redis实战476
14.1Redis入门476
14.1.1Redis的安装和配置476
14.1.2Redis客户端命令479
14.1.3Redis键的命名规范480
14.2Redis数据类型481
14.2.1String481
14.2.2List482
14.2.3Hash484
14.2.4Set485
14.2.5ZSet486
14.3Jedis基础编程的实战案例487
14.3.1Jedis操作String488
14.3.2Jedis操作List490
14.3.3Jedis操作Hash491
14.3.4Jedis操作Set493
14.3.5Jedis操作ZSet494
14.4JedisPool连接池的实战案例497
14.4.1JedisPool的配置497
14.4.2JedisPool的创建和预热499
14.4.3JedisPool的使用501
14.5使用spring-data-redis完成CRUD的实战案例502
14.5.1CRUD中应用缓存的场景502
14.5.2配置spring-redis.xml504
14.5.3RedisTemplate模板API506
14.5.4使用RedisTemplate模板API完成CRUD的实战案例509
14.5.5使用RedisCallback回调完成CRUD的实战案例511
14.6Spring的Redis缓存注解513
14.6.1使用Spring缓存注解完成CRUD的实战案例514
14.6.2spring-redis.xml中配置的调整515
14.6.3@CachePut和@Cacheable注解517
14.6.4@CacheEvict注解518
14.6.5@Caching组合注解519
14.7详解SpEL520
14.7.1SpEL运算符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.1IM节点的POJO类530
15.2.2IM节点的ImWorker类531
15.3Worker集群的负载均衡的实战案例534
15.3.1ImLoadBalance负载均衡器535
15.3.2与WebGate的整合537
15.4即时通信消息的路由和转发的实战案例538
15.4.1IM路由器WorkerRouter538
15.4.2IM转发器PeerSender541
15.5在线用户统计的实战案例543
15.5.1Curator的分布式计数器543
15.5.2用户上线和下线的统计545