Netty的深入浅出--58.channel与channelHandler及channelHandlerContext

这是上一章我们重点分析的部分

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第1张图片

这一章我们继续往下分析 

这里要首先下一个定义:ChannelContext是ChannelHandler和ChannelPipeline之间交互的桥梁

addLast里面创建的对象是要到达一个指定事件发生的时候才会被执行

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第2张图片

查看ChannelInitializer

 

 我们可以看到,我们自定义的MyServerInitializer也是继承于ChannelInitializer

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第3张图片

我们可以看到 ChannelInitializer简化了我们的编程,通过一个initChannel方法将若干个程序里面所需要的处理器添加到了pipeline当中

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第4张图片 

因此我们可以看出 ChannelInitializer是一个很重要的组件。

我们可以看到ChannelInitializer继承了ChannelInboundHandlerAdapter类(它是处理入栈数据的处理器适配器,而ChannelOutboundHandlerAdapter是处理出栈的处理器适配器)。它经常使用在handler()、childHandler()方法中。

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第5张图片

 现在我们来研究一下这里的ChannelPipeline.addlast()方法到底做了什么

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第6张图片

 将ChannelHandler插入到pipeline的最后一个位置

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第7张图片

 查看addLast的实现

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第8张图片

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第9张图片 

查看AbstracChannelHandlerContext

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第10张图片 

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第11张图片 

 

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第12张图片 

doc文档中就说了我之前下的那个定义,channelhandlercontext即可以通知channelpipeline中的下一个channelhandler,还可以动态修改channelpipeline对象

Netty的深入浅出--58.channel与channelHandler及channelHandlerContext_第13张图片 

描述的意思是你可以提前保存好一个ChannelHandlerContext对象然后可以供其他线程或者外部事件去触发使用它

 

一个ChannelHandler可以有多个ChannelHandlerContext,因为一个ChannelHandler实例可以被多个ChannelPipeline所添加

 

每加入一次ChannelHandler就会产生一个ChannelContext对象,在下面的例子中FactorialHandler fh只有一个实例,但是它对于了四个ChannelHandlerContext对象。

 

 

你可能感兴趣的:(Netty网络编程)