netty源码分析 之四 transport(ChannelPipeline)
来源:互联网 发布:网上刷火车票软件 编辑:程序博客网 时间:2024/05/18 02:02
前面看了channel定义,以及接口定义,可知道实现类。
* I/O Request * via {@link Channel} or * {@link ChannelHandlerContext} * | * +---------------------------------------------------+---------------+ * | ChannelPipeline | | * | \|/ | * | +----------------------------------------------+----------+ | * | | ChannelHandler N | | * | +----------+-----------------------------------+----------+ | * | /|\ | | * | | \|/ | * | +----------+-----------------------------------+----------+ | * | | ChannelHandler N-1 | | * | +----------+-----------------------------------+----------+ | * | /|\ . | * | . . | * | ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()| * | [method call] [method call] | * | . . | * | . \|/ | * | +----------+-----------------------------------+----------+ | * | | ChannelHandler 2 | | * | +----------+-----------------------------------+----------+ | * | /|\ | | * | | \|/ | * | +----------+-----------------------------------+----------+ | * | | ChannelHandler 1 | | * | +----------+-----------------------------------+----------+ | * | /|\ | | * +---------------+-----------------------------------+---------------+ * | \|/ * +---------------+-----------------------------------+---------------+ * | | | | * | [ Socket.read() ] [ Socket.write() ] | * | | * | Netty Internal I/O Threads (Transport Implementation) | * +-------------------------------------------------------------------+
在看下接口方法
ChannelPipeline 主要是 inbound和outbound方法
inbound方法一般是内部定义的模板方法,继承实现之后就期待调用即可
outbound方法一般是对方提供api接口,比如bind connect read write等
DefaultChannelPipeline
然后我们看下channelPipeline的实现类,如何构造pipe的final AbstractChannel channel; final AbstractChannelHandlerContext head; final AbstractChannelHandlerContext tail; private final Map<String, AbstractChannelHandlerContext> name2ctx = new HashMap<String, AbstractChannelHandlerContext>(4); /** * @see #findInvoker(EventExecutorGroup) */ private Map<EventExecutorGroup, ChannelHandlerInvoker> childInvokers; DefaultChannelPipeline(AbstractChannel channel) { if (channel == null) { throw new NullPointerException("channel"); } this.channel = channel; tail = new TailContext(this); head = new HeadContext(this); head.next = tail; tail.prev = head; }
关键的两个类tailContext和headcontext,这样的话就扯出我们下一个接口 ChannelHandler
0 0
- netty源码分析 之四 transport(ChannelPipeline)
- netty源码分析之ChannelPipeline
- netty源码分析之ChannelPipeline
- Netty源码分析:ChannelPipeline
- Netty学习之旅------源码分析ChannelPipeline实现原理
- netty源码分析之-Channel与ChannelPipeline详解(6)
- [netty源码分析]--ChannelPipeline源码分析(一)
- netty源码分析 之二 transport(bootstrap)
- netty源码分析 之三 transport(channel)
- netty源码分析 之五 transport(ChannelHandler)
- netty源码分析 之六 transport(EventLoop)
- netty源码分析 之七 transport(Unsafe)
- netty源码分析 之八 transport(总结)
- netty ChannelPipeline流处理源码详细分析
- Netty源码分析之二【贯穿Netty的大动脉──ChannelPipeline】
- java netty之ChannelPipeline
- 【Netty源码】ChannelPipeline源码剖析
- Netty源码学习——ChannelPipeline模型分析
- keil如何仿真
- 分组背包hdu 3033 至少选一个
- java实现Excel压缩成Zip导出
- 遍历map集合
- python编码错误:UnicodeDecodeError: 'utf8' codec can't decode
- netty源码分析 之四 transport(ChannelPipeline)
- 常用网络模型结构LeNet,AlexNET,VGG,BN-inception,ResNet网络模型简介和资料整理--caffe学习(8)
- java web小结(一)
- JSONObject与JSONArray的使用
- 虚拟机中的Linux安装VMware Tools的方法
- json技术比较
- dubbo + zookeeper + spring 实战++
- 数据库中的内连接、自然连接、外连接
- 浙江中医药大学-数据结构与算法期末考试应用题图论补充