第1章 高并发时代的技能 1
6 M: g) s$ G y 1.1 Netty为何这么火 1% \, ?8 E/ X! Y( e p
1.1.1 Netty火热的程度 1
4 A/ @) w% u+ x* {: f7 ?# D1.1.2 Netty是面试的必杀器 2$ ~1 G2 N. C0 \5 A
1.2 高并发利器Redis 2
& {* `+ L( F* u1 W1 W4 p5 u, }1.2.1 什么是Redis 26 f7 U7 `1 X0 P
1.2.2 Redis成为缓存事实标准的原因 3
/ O9 D2 {# z. x7 F0 X& D 1.3 分布式利器ZooKeeper 3' G$ I4 z# Y7 {9 ]
1.3.1 什么是ZooKeeper 3
0 A% h# k( N, U- Z/ A% p1.3.2 ZooKeeper的优势 4
9 c! b, H5 J; [, B 1.4 高性能HTTP通信技术 4
, P9 K' P' w, `: m& g- y2 j1.4.1 十万级以上高并发场景中的高并发HTTP通信技术 51 G7 X5 ?/ B& ^4 O. v. R" F
1.4.2 微服务之间的高并发RPC技术 62 I! y( v( m ^: k. ^
1.5 高并发IM的综合实战 77 _! _. u5 \' K" f2 P1 E9 F
1.5.1 高并发IM的学习价值 8
. X% z+ ]! K/ S- d1.5.2 庞大的应用场景 8
( m0 B% g2 E9 Z" q( f ^/ J0 I第2章 高并发IO的底层原理 10' k/ y% H3 u6 ~1 m
2.1 IO读写的基本原理 10
" V1 T% M# a) O2.1.1 内核缓冲区与进程缓冲区 11; U5 S7 n: D' ?. P
2.1.2 典型的系统调用流程 11) Q) M7 S/ v" n% f( @2 ~
2.2 四种主要的IO模型 13) v! V8 T% d$ o" y: i E
2.2.1 同步阻塞IO 14
9 c$ A3 \) c1 B0 g2.2.2 同步非阻塞IO 15
N. ^( [. y. T( k# o/ Y: Y2.2.3 IO多路复用 16
* D k5 o3 G5 \% j2.2.4 异步IO 170 _4 F8 [3 E `( k5 q$ K. F9 {& ]
2.3 通过合理配置来支持百万级并发连接 18- e9 w5 U ~1 P) `
第3章 Java NIO核心详解 211 n0 Y2 r& { E6 u/ V
3.1 Java NIO简介 213 v0 i9 F: s# g1 q$ A- N j
3.1.1 NIO和OIO的对比 219 H$ d2 j1 D. V! `& _7 \( H
3.1.2 通道 22
# \+ o* V& B* ]& P- f. h, W3.1.3 选择器 22/ [) E. Z. h# c
3.1.4 缓冲区 23" q+ i" D' e" D
3.2 详解NIO Buffer类及其属性 23 n: ?% w, p0 `1 n, H9 g. y! j
3.2.1 Buffer类 23& m# }) C+ c) a2 j5 j, \
3.2.2 Buffer类的重要属性 23
' t* \7 y8 d+ [9 D2 v- C" L$ M) d) { 3.3 详解NIO Buffer类的重要方法 26% s0 [4 F9 ^, d5 d* v6 }8 o* \
3.3.1 allocate() 26 a' G8 ]- F& V( a; J
3.3.2 put() 27
( y+ n; ?( W8 S" A/ q3.3.3 flip() 27
. B- ?5 u( v. b4 A; E3 L3.3.4 get() 29
n7 r5 E% A; A/ w& ~3.3.5 rewind() 30
; ~+ R. x2 q# q3 _% v3.3.6 mark()和reset() 32
# k) R. ?! h+ u% X! g7 ?3.3.7 clear() 33, m7 d3 ^, \) J) a' c
3.3.8 使用Buffer类的基本步骤 343 M$ _7 V1 t" {" c6 g/ Y8 X: ^
3.4 详解NIO Channel类 345 G8 X2 |/ z$ [6 A! U0 y
3.4.1 FileChannel 35
$ A( _ H- G3 I$ Q5 s9 n# v3.4.2 使用FileChannel完成文件复制的实战案例 370 q6 \% g+ ]& ~$ q
3.4.3 SocketChannel 39
3 F) o' b1 v2 i. z1 W3.4.4 使用SocketChannel发送文件的实战案例 41 V, I& C4 T* W2 Z8 g: s
3.4.5 DatagramChannel 43. g0 n5 P4 O/ X
3.4.6 使用DatagramChannel发送数据的实战案例 45
9 F& u% V/ M" Y1 N6 h! F 3.5 详解NIO Selector 47* [; @1 K* A9 C4 E
3.5.1 选择器与注册 47$ K. N" Y; n: T% M+ Z+ u0 {
3.5.2 SelectableChannel 48
' V$ e) ]* Z! h) p3.5.3 SelectionKey 48
% ~9 R1 ]# B4 ?. X3.5.4 选择器使用流程 48+ e% _9 v) N) l+ ]
3.5.5 使用NIO实现Discard服务器的实战案例 50
% F2 ^5 q) v( A: x0 ]3.5.6 使用SocketChannel在服务端接收文件的实战案例 53
h$ a/ D: d6 A/ M第4章 鼎鼎大名的Reactor模式 59
8 K7 c! x! Y( ?0 ?" {, ^ 4.1 Reactor模式的重要性 59
5 s3 l* x1 p, z+ s& O4.1.1 为什么首先学习Reactor模式 59& E8 q" _6 N, X9 F5 l( J
4.1.2 Reactor模式简介 60
' B( y* _1 A5 V; V+ ]4.1.3 多线程OIO的致命缺陷 60
" y- _+ a) u6 k7 T. s 4.2 单线程Reactor模式 62
/ ~2 N& n- h7 {# N0 Q' [0 C9 G4.2.1 什么是单线程Reactor 62' ]: Y/ Q# u& l2 @) v
4.2.2 单线程Reactor的参考代码 63% X8 j! a( {7 J4 L
4.2.3 单线程Reactor模式的EchoServer的实战案例 66$ e5 g; {- Y3 ]" A% y$ _
4.2.4 单线程Reactor模式的缺点 691 N2 [0 n& t c0 D5 P
4.3 多线程Reactor模式 69
) N9 q9 G8 L- g2 d* z& J- M" E! ^& m. c4.3.1 多线程版本的Reactor模式演进 69; ~% N* T$ t* z& ?9 i5 c6 C6 k
4.3.2 多线程版本Reactor的实战案例 69
: Z! B4 x M, n, p8 ^; r8 r4.3.3 多线程版本Handler的实战案例 72) B4 K+ [# W; E; n8 R
4.4 Reactor模式的优缺点 74- \+ r* w9 s5 b! a& Z+ ?: ~6 G& P7 m
第5章 Netty核心原理与基础实战 76# u- z3 H ?' `) f( g4 j C
5.1 个Netty实战案例DiscardServer 76
6 o% b z7 g S0 V" T$ R9 R5.1.1 创建个Netty项目 76
9 E% X" D) q Z Z. K5.1.2 个Netty服务端程序 77
" ?; V$ N( _. \3 e7 P3 S5.1.3 业务处理器NettyDiscardHandler 79
9 K1 ~8 h/ g( C2 U$ m, B$ D5 C3 S k! X" K5.1.4 运行NettyDiscardServer 80
- s% r/ ]$ J" n- `7 `0 Z 5.2 解密Netty中的Reactor模式 80
3 o- T) U7 W7 K5.2.1 回顾Reactor模式中IO事件的处理流程 81: z w& P V1 D; e' ~% B) l
5.2.2 Netty中的Channel 81
0 W6 g0 Q+ O0 L! R+ l5.2.3 Netty中的Reactor 82
- D5 v2 L' Z# D& }8 o. M8 |( q5.2.4 Netty中的Handler 83
% M! u) j+ a! t7 P9 `( E2 B; l: c5.2.5 Netty中的Pipeline 84
- a: n7 S" R: @& N# q% n" q0 Q 5.3 详解Bootstrap 86
, [' t4 B, C4 G* {5.3.1 父子通道 864 G- L' i) a+ h4 R0 Q
5.3.2 EventLoopGroup 87# i* D1 h; g5 R! U# |% I4 @$ }" j w
5.3.3 Bootstrap启动流程 88
! V( N8 `- I& x( j2 i, B0 E5.3.4 ChannelOption 91
2 T& m# l" d9 M 5.4 详解Channel 93
; X6 ?* A% S5 r; N* [- q5.4.1 Channel的主要成员和方法 93
' ?, ^, \' z) L. C0 W7 G5.4.2 EmbeddedChannel 94
' f4 {3 d4 W; B- A7 A 5.5 详解Handler 957 t3 |& r) |/ Q" K2 H
5.5.1 ChannelInboundHandler入站处理器 96- F$ `5 e1 f; ]. Q' t( [
5.5.2 ChannelOutboundHandler出站处理器 974 J. V0 Z; E, m' D; m
5.5.3 ChannelInitializer通道初始化处理器 99' {2 g% i. y$ U7 Z& V+ g
5.5.4 ChannelInboundHandler的生命周期的实战案例 99
+ o* M) ~+ }! {% A+ o 5.6 详解Pipeline 103
( f& ~! ^3 Z4 W# Q9 c1 @) g1 l5.6.1 Pipeline入站处理流程 103
; E8 `5 @( c- X# z2 X. U+ o' [