这是上一章我们重点分析的部分
这一章我们继续往下分析
这里要首先下一个定义:ChannelContext是ChannelHandler和ChannelPipeline之间交互的桥梁
addLast里面创建的对象是要到达一个指定事件发生的时候才会被执行
查看ChannelInitializer
我们可以看到,我们自定义的MyServerInitializer也是继承于ChannelInitializer
我们可以看到 ChannelInitializer简化了我们的编程,通过一个initChannel方法将若干个程序里面所需要的处理器添加到了pipeline当中
因此我们可以看出 ChannelInitializer是一个很重要的组件。
我们可以看到ChannelInitializer继承了ChannelInboundHandlerAdapter类(它是处理入栈数据的处理器适配器,而ChannelOutboundHandlerAdapter是处理出栈的处理器适配器)。它经常使用在handler()、childHandler()方法中。
现在我们来研究一下这里的ChannelPipeline.addlast()方法到底做了什么
将ChannelHandler插入到pipeline的最后一个位置
查看addLast的实现
查看AbstracChannelHandlerContext
doc文档中就说了我之前下的那个定义,channelhandlercontext即可以通知channelpipeline中的下一个channelhandler,还可以动态修改channelpipeline对象
描述的意思是你可以提前保存好一个ChannelHandlerContext对象然后可以供其他线程或者外部事件去触发使用它
一个ChannelHandler可以有多个ChannelHandlerContext,因为一个ChannelHandler实例可以被多个ChannelPipeline所添加
每加入一次ChannelHandler就会产生一个ChannelContext对象,在下面的例子中FactorialHandler fh只有一个实例,但是它对于了四个ChannelHandlerContext对象。