Netty的工作机制
Posted 逅弈逐码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty的工作机制相关的知识,希望对你有一定的参考价值。
本文简单的介绍下Netty是如何工作的,可以用一个简易的图描述如下:
为什么说这是一个简易的图呢,因为Netty中远不止这些,只是为了大致描述下Netty工作的流程,还有很多细节上的东西都没有描述出来。
首先Netty有一个针对 Socket 的抽象: Channel
,所有的数据读写操作都会在这个 Channel
上执行,每个 Channel
有一个 ChannelPipeline
,他负责管理这个 Channel
中的所有 ChannelHandler
。想要具体了解 ChannelPipeline
可以看笔者写的另一篇文章:。
ChannelPipeline
是一个类似于拦截器模式的设计,数据从 head 传递到 tail ,经过处理之后再从 tail 传递到 head ,你可以在 ChannelPipeline
中进行可重用的业务逻辑处理,在Netty中已经通过这种方式实现了内置的编解码器。
举个简单的例子,我们可以把数据的传递过程想象成很多人在地里摘西瓜。
我们有很多人一个挨一个的从西瓜地一直排到卡车边上,西瓜就是我们要传递的 Data
, 每个人就相当于一个 ChannelHandlerContext
,他手里有一个扫描的枪就相当于 ChannelHandler
。
第一个人把西瓜从地里摘起来之后用他的枪扫了下,发现是个完整的西瓜,然后就传给了第二个人;
第二个人拿到西瓜之后也用他的枪扫了一下,发现这个西瓜确实已经熟了,然后就传给了第三个人;
第三个人拿到西瓜之后也用他的枪扫了一下,发现这个西瓜纹理清晰,然后就继续传给了第四个人;
。。。
最后一个人拿到西瓜之后用枪扫了一下,发现这个西瓜的尺寸符合标准,然后就把西瓜装到卡车上了。
至此西瓜已经从地里被运送到了卡车上,但是中间的过程中只要有任何一个人的检测结果不符合他的要求,那么他就可以对这个西瓜做出他自己的处置,比如可以直接将西瓜丢弃掉,或者告诉前一个人说这个西瓜不符合标准。
PS:ChannelHandlerContext是一个将数据从一个ChannelHandler传递到下一个ChannelHandler的辅助类,在ChannelPipeline中所有的ChannelHandlerContext会形成一个双向的链表,这个在后面的章节会详细的介绍。
以上是关于Netty的工作机制的主要内容,如果未能解决你的问题,请参考以下文章