Netty-Pipeline源码解析(创立与ChannelHandler管理)
Netty的ChannelPipeline是ChannelHandler的容器,它负责ChannelHandler的管理和事件阻拦与调度。
这里看下有个Pipeline的少量初始化工作:
代码分析
- ChannelPipeline的创立工作,ChannelPipeline是在AbstractChannel的newChannelPipeline方法中创立,并且将当前对象传递进去。
而调用newChannelPipeline的时候是Channel进行创立的时候,所以Channel与Pipeline基本上是同时创立的。或者者说Pipeline在Channel内部创立。
image
- DefaultChannelPipeline的构造器。在构造DefaultChannelPipeline的时候,重点是创立了TailContext与HeadContext,并且Context的构造参数都是pipline。
image
image
image
- HeadContext多了unsafe,inbound为false,outbound为true
- TailContext的inbound为true,outbound为false
setComplete涉及到cas的用法,就是标记一下状态位。
- ChannelPipeline的构造工作很少,但是它既然是ChannelHandler的容器,当对ChannelHandler进行管理的时候是什么样的呢。先看看ChannelHandler都会有handlerAdded和handlerRemoved方法。
image
- 增加ChannelHandler,其内部调用的是addLast方法。
image
image
image
在增加ChannelHandler的时候:
- 首先检查这个ChannelHandler是不是重复增加了,假如重复的,那么能否可共享,参与checkMultiplicity。
- newContext会创立DefaultChannelHandlerContext,入参:当前的pipeline,group(执行器),name,ChannelHandler
- addLast0就是链表的增加删除。
- 最后调用写好的ChannelHandler的handlerAdded方法。
// 创立ctx的时候,将handler传递了进去,再调用handler方法获取handler,而后调用handler的handlerAdde方法。ctx.handler().handlerAdded(ctx);
- ChannelHandler的删除。既然看过了增加,那么也看一下删除ChannelHandler的工作。
image
image
- 基本上都是对已经增加的ChannelHandler进行遍历工作,找到对应的Handler构建的AbstractChannelHandlerContext。
- remove0是链表的删除
- 再调用ChannelHandler的handlerRemoved的方法。
最后
这里简单说明下ChannelPipeline的创立工作与对ChannelHandler的管理,ChannelPipeline还有事件的传播属性,下回分析。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Netty-Pipeline源码解析(创立与ChannelHandler管理)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Netty-Pipeline源码解析(创立与ChannelHandler管理)