File tree Expand file tree Collapse file tree 3 files changed +40
-40
lines changed Expand file tree Collapse file tree 3 files changed +40
-40
lines changed Original file line number Diff line number Diff line change @@ -24,9 +24,9 @@ Netty是Java世界知名的网络应用框架。本系列文章是Netty的源码
24
24
25
25
### [ 1.概述] ( https://github.com/code4craft/netty-learning/blob/master/ch1-overview.md )
26
26
### [ 2.Netty中的buffer] ( https://github.com/code4craft/netty-learning/blob/master/ch2-buffer.md )
27
- ### [ 3.层层分析Netty中的Channel(上) ] ( https://github.com/code4craft/netty-learning/blob/master/ch3-pipeline.md )
28
- ### [ 4.层层分析Netty中的Channel(中) ] ( https://github.com/code4craft/netty-learning/blob/master/ch4-channel-events .md )
29
- ### [ 5.层层分析Netty中的Channel(下) ] ( https://github.com/code4craft/netty-learning/blob/master/ch5-channel-nio.md ) * 未完成*
27
+ ### [ 3.逐层分析Channel部分的实现机制 ] ( https://github.com/code4craft/netty-learning/blob/master/ch3-pipeline.md )
28
+ ### [ 4.Channel的生命周期 ] ( https://github.com/code4craft/netty-learning/blob/master/ch4-channel-lifecycle .md )
29
+ ### [ 5.Netty与Reactor模式 ] ( https://github.com/code4craft/netty-learning/blob/master/ch5-channel-nio.md ) * 未完成*
30
30
### [ 6.分门别类讲讲Handler] ( https://github.com/code4craft/netty-learning/blob/master/ch6-handler.md ) * 未完成*
31
31
32
32
## 二、Netty中的特性与细节
Original file line number Diff line number Diff line change 1
- 层层分析Netty中的Channel(上)
1
+ 逐层分析Channel部分的实现机制
2
2
--------
3
- Channel是理解和使用Netty的核心。之前在概述中粗略讲到了事件驱动机制, 在这篇文章中,我们将详细分析Channel及其的实现。ChannelPipeline的涉及内容较多 ,这里我使用由浅入深的介绍方法。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。
3
+ Channel是理解和使用Netty的核心。在这篇文章中,我们主要介绍Netty中Channel部分的实现机制。Channel的涉及内容较多 ,这里我使用由浅入深的介绍方法。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。
4
4
5
- ## 一层梦境:Channel机制概览
5
+ ## 一层梦境:Channel实现概览
6
6
7
7
在Netty里,` Channel ` 是通讯的载体,而` ChannelHandler ` 负责Channel中的逻辑处理。
8
8
@@ -126,7 +126,7 @@ DefaultChannelPipeline里还有些机制,像添加/删除/替换Handler,以
126
126
127
127
![ universal API] [ 3 ]
128
128
129
- 理清了ChannelPipeline的主流程,我们对Channel部分的大致结构算是弄清楚了。可是到了这里,我们依然对一个连接具体怎么处理没有什么概念,下篇文章,我们会分析一下,Netty在连接的建立 、数据的传输过程中,具体做了什么事情。
129
+ 理清了ChannelPipeline的主流程,我们对Channel部分的大致结构算是弄清楚了。可是到了这里,我们依然对一个连接具体怎么处理没有什么概念,下篇文章,我们会分析一下,Netty中一个连接的生命周期,在连接的建立 、数据的传输过程中,具体做了什么事情。
130
130
131
131
PS: Pipeline这部分拖了两个月,终于写完了。中间写的实在缓慢,写个高质量(至少是自认为吧!)的文章不容易,但是仍不忍心这部分就此烂尾。中间参考了一些优秀的文章,还自己使用netty开发了一些应用。以后这类文章,还是要集中时间来写完好了。
132
132
Original file line number Diff line number Diff line change 1
- 层层分析Netty中的Channel(中)
1
+ Channel的生命周期
2
2
--------
3
3
4
4
上篇文章讲到了Netty的Channel内部的运作机制,这篇文章详细分析Channel的生命周期。
5
5
6
- ## 一、连接的创建
6
+ ## 一、Java中的Socket生命周期
7
7
8
- ### 上层世界:Netty中Channel的类型及创建
8
+ Server:
9
9
10
- 我们在使用Netty时,总是需要指定一个 ` ChannelFactory ` ,这个就是
10
+ Open=>Bind=>Accept
11
11
12
- Bind: ` NioServerSocketChannel `
12
+ Client:
13
13
14
- Accept: ` NioServerBoss `
14
+ Open=>Connect
15
15
16
- Read:` NioWorker.read `
17
16
18
- Write: ` AbstractNioWorker `
17
+ 无论是NIO还是OIO,都是这个原理,NIO最大的改变是引入了Selector机制,来解决IO等待的问题。
19
18
20
- ### 下层世界:NIO中的
19
+ ## 二、Netty中Channel的生命周期
21
20
22
- | NIO | Netty |
23
- | -| -|
24
- | SelectionKey.OP_READ | |
25
- | SelectionKey.OP_WRITE | |
26
- | SelectionKey.OP_CONNECT | |
27
- | SelectionKey.OP_ACCEPT | |
21
+ 我们在使用Netty时,总是需要指定一个` ChannelFactory ` ,这个就是
28
22
23
+ Open:
29
24
25
+ Bind:
30
26
27
+ Accept:
31
28
32
- ## 二、Interest与Selector
29
+ Connect:
33
30
34
- ## 三、服务器端的多线程
31
+ Read:
35
32
36
- ## 回到现实:几种与对应的实现
33
+ Write:
37
34
38
- ## NIO:
35
+ ## 三、Reactor模式及Netty中的实现
39
36
40
- Selector ->Boss
41
- ->Worker
42
37
43
38
44
- 实际上Channel部分没有太多内容,
45
39
46
- > TODO
47
40
48
- ServerChannel
41
+ 那么在Netty中呢?实际上,Server部分的业务基本不涉及到逻辑,建立连接后
49
42
50
- SocketChannel
51
43
52
- DatagramChannel
44
+ ## 一、连接的创建
45
+
46
+ ### 上层世界:Netty中Channel的类型及创建
53
47
54
- LocalChannel
55
48
56
- ----------
57
49
58
- ChannelHandler
50
+ Bind: ` NioServerSocketChannel `
51
+
52
+ Accept:` NioServerBoss `
59
53
60
- ChannelUpstreamHandler
54
+ Read: ` NioWorker.read `
61
55
62
- ChannelDownstreamHandler
56
+ Write: ` AbstractNioWorker `
63
57
64
- Config Parent & Child
58
+ ### 下层世界:NIO中的
59
+
60
+ | NIO | Netty |
61
+ | -| -|
62
+ | SelectionKey.OP_READ | |
63
+ | SelectionKey.OP_WRITE | |
64
+ | SelectionKey.OP_CONNECT | |
65
+ | SelectionKey.OP_ACCEPT | |
65
66
66
- 通过handler把底层隔离了
67
67
68
68
![ Multiple Reactors] [ 1 ]
69
69
You can’t perform that action at this time.
0 commit comments