Netty源码分析之ChannelPipline

接口ChannelPipeline

定义:

public interface ChannelPipeline
        extends ChannelInboundInvoker, 
        ChannelOutboundInvoker, 
        Iterable<Entry<String, ChannelHandler>>

继承了ChannelInboundInvoker的入站传递事件的方法:
在这里插入图片描述
继承了ChannelOutboundInvoker的出站事件处理方法:
在这里插入图片描述
定义了自己管理ChannelHandler的方法:
在这里插入图片描述

接口ChannelPipeline的唯一默认实现类DefaultChannelPipeline

DefaultChannelPipeline的构造方法:
在这里插入图片描述
在这里插入图片描述

在构造方法中,有对tail和head的实例化,并把head和tail连成了双向链表。
TailContext和HeadContext都是类DefaultChannelPipeline的内部类:
HeadContext:

final class HeadContext 
			extends AbstractChannelHandlerContext
            implements ChannelOutboundHandler, ChannelInboundHandler

TailContext:

final class TailContext 
			extends AbstractChannelHandlerContext 
			implements ChannelInboundHandler

可以看到,TailContext和HeadContext都是类AbstractChannelHandlerContext类的子类,而AbstractChannelHandlerContext是接口ChannelHandlerContext的骨架抽象实现,这两个类就是pipline中的两个节点,HeadContext是链第一个,TailContext是链的最后一个。此外HeadContext还实现了ChannelOutboundHandler和ChannelInboundHandler,表明它不仅是一个入站节点还是一个出站节点,而TailContext只实现了ChannelInboundHandler,表明它仅作为入站节点使用。
在这里插入图片描述