一、ChannelPipeline
pipeline意为管道、运输、传递,ChannelPipeline可意为channel的传输或者传递的管道。针对channel的分析我们可知,每一个channel都持有一个ChannelPipeline对象。
二、DefaultChannelPipeline
DefaultChannelPipeline是ChannelPipeline的默认实现,会通过AbstractChannel中的newChannelPipeline方法实例化,并赋值给channel的pipeline属性。
final AbstractChannelHandlerContext head;
final AbstractChannelHandlerContext tail;
protected DefaultChannelPipeline(Channel channel) {
tail = new TailContext(this);
head = new HeadContext(this);
head.next = tail;
tail.prev = head;
}
从源码可以看出ChannelPipeline维护着ChannelHandlerContext的一个双向链表,其中的方法也是针对这个双向链表结构来增删改操作。在往链表中插入值的时候,首先需要把ChannelHandler封装成DefaultChannelHandlerContext后再插入到链表中。所以链表中实际维护的值应该是ChannelHandler。
三、总结
ChannelPipeline就是一个连接Channel和ChannelHandler的中间数据结构,用户会往ChannelPipeline中添加想要的ChannelHandler,然后Channel会根据处理情况选择对应的Handler来处理相应消息。
以上,有任何不对的地方,请指正,敬请谅解。