Skip to content

Commit 74c3d87

Browse files
committed
文字润色
1 parent 7fcabd1 commit 74c3d87

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

asserts/diagram-flow.jpg

69.2 KB
Loading

ch3-pipeline.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Channel与Pipeline
22
--------
3-
Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Netty中Channel部分的实现机制。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。
3+
Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。
44

55
## 一层梦境:Channel实现概览
66

@@ -60,7 +60,7 @@ Netty官方的javadoc里有一张图(`ChannelPipeline`接口里),非常形象
6060

6161
前面提到了,`ChannelPipeline`接口的两个重要的方法:`sendUpstream(ChannelEvent e)``sendDownstream(ChannelEvent e)`**所有事件**的发起都是基于这两个方法进行的。`Channels`类有一系列`fireChannelBound`之类的`fireXXXX`方法,其实都是对这两个方法的facade包装。
6262

63-
下面来看一下这两个方法的实现(对代码做了一些简化,保留主逻辑):
63+
下面来看一下这两个方法的实现。先看sendUpstream(对代码做了一些简化,保留主逻辑):
6464

6565
```java
6666
public void sendUpstream(ChannelEvent e) {
@@ -126,7 +126,7 @@ DefaultChannelPipeline里还有些机制,像添加/删除/替换Handler,以
126126

127127
![universal API][3]
128128

129-
理清了ChannelPipeline的主流程,我们对Channel部分的大致结构算是弄清楚了。可是到了这里,我们依然对一个连接具体怎么处理没有什么概念,下篇文章,我们会分析一下,Netty中一个连接的生命周期,在连接的建立、数据的传输过程中,具体做了什么事情
129+
理清了ChannelPipeline的主流程,我们对Channel部分的大致结构算是弄清楚了。可是到了这里,我们依然对一个连接具体怎么处理没有什么概念,下篇文章,我们会分析一下,在Netty中,捷径如何处理连接的建立、数据的传输这些事情
130130

131131
PS: Pipeline这部分拖了两个月,终于写完了。中间写的实在缓慢,写个高质量(至少是自认为吧!)的文章不容易,但是仍不忍心这部分就此烂尾。中间参考了一些优秀的文章,还自己使用netty开发了一些应用。以后这类文章,还是要集中时间来写完好了。
132132

ch4-channel-lifecycle.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@ Channel与NIO
55

66
## 一、Socket的生命周期
77

8-
在Java里,我们使用[Socket](http://en.wikipedia.org/wiki/Network_socket)编程方式处理网络IO。在OIO中有`ServerSocket``Socket``DatagramSocket`,前两个对应TCP连接,后一个对应UDP报文。在NIO中,我们改用了`ServerSocketChannel``SocketChannel``DatagramChannel`,并拥有了基于Selector的通知机制,但是Socket使用的方式可以说没有什么变化
8+
在TCP/IP协议中,网络传输层分为TCP和UDP两种。UDP没有连接的概念,双方都是对等的,只存在send&receive,相对简单。对于TCP,乃至于所有有连接的传输层协议,都可以简单的概括为三个步骤:建立连接、传输、关闭连接
99

10-
UDP没有连接的概念,双方都是对等的,只存在send&receive,相对简单。而对于TCP socket,则需要经过建立连接的过程
10+
在Java里,无论是OIO还是NIO,都是使用[Socket](http://en.wikipedia.org/wiki/Network_socket)编程方式。在OIO中有`ServerSocket``Socket``DatagramSocket`,前两个对应TCP,后一个对应UDP。在NIO中,我们改用了`ServerSocketChannel``SocketChannel``DatagramChannel`,并拥有了基于Selector的通知机制,但是Socket使用的方式可以说没有什么变化
1111

12-
在建立连接之前,存在两个角色:Server和Client。
12+
而对于TCP socket,则需要经过建立连接的过程。
13+
14+
在建立连接之前,存在两个角色:ServerSocketChannel和SocketChannel。
1315

1416
Client端的流程是这样:
1517

16-
Open=>Connect
18+
open()=>connect()
1719

1820
Server端的流程是这样:
1921

20-
Open=>Bind=>(Listen)=>Accept
22+
open()=>bind()=>(listen)=>accept()
2123

2224
建立连接之后,C/S双方都会拿到一个对等的`SocketChannel`,通过它可以进行`read()`/`write()`等数据交互,并可以使用`close()`关闭连接。
2325

0 commit comments

Comments
 (0)