Netty源码分析之ChannelPipline
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,表明它仅作为入站节点使用。