java netty handler之ChannelInboundHander与ChannelOutboundHandler

前面的文章主要分析的是netty的事件驱动的部分,这篇文章就来看看其handler的定义吧,还是先来看看它的继承体系:

java netty handler之ChannelInboundHander与ChannelOutboundHandler_第1张图片

上面的是整个netty的handler最为顶层的几个接口的定义

首先是ChannelHandler,它定义的方法并不多,而且这些方法的用处都不是太多,不过这里有的比较重要的注释,也就是这个handerl是否可以共享

(1)可以共享,那么表示我们这个handler对象最终只需要实例化一次就可以,每一次执行这个handler的方法,其实都是用的同一个handler对象

(2)不可共享,可能对于每一个channel,我们都要实例化这个handler的一个对象将其加入到pipeline中,当handler类中定义了一些属性的话,那么就只有这样了。。。


在接下来,handler就被分成了两个种类,statehandler与operationhandler,顾名思义,基本上就能知道这两种handler有什么区别,其实在前面的文章中也有讲到这两种handler的区别,

(1)stathandler,这是在当前hander所属的channel发生了一些变化之后会调用该handler里面的相应的方法,例如当读到了数据,保存到了buffer中,那么将会从pipeline的从前到后开始找stathandler,调用其inboundBufferUpdated方法来处理这些读进来的数据。。另外在整个pipeline中始终有一个定义的stathandler在最末尾,如果数据最后不得不由它来处理,那么默认的动作就是抛弃这些数据。。。当然还有很多其他的方法,例如当前的channel被注册到了eventloop等。。。


(2)operationhandler,这是一个对外的handler类型,其中最为重要的方法就是flush方法,它用于将buffer中的数据发送出去。。在整个pipeline中的第一个handler将会是一个默认的operationhandler,一般情况下数据都会由它来flush出去,另外它还包含了一个unsafe对象,它就是在当前所属channel的unsafe对象,例如此handler的flush方法,说白了就是调用这个unsafe对象的flush方法,将数据发送出去。。。


最后两个接口,inboundhandler继承自stathandler,outboundhandler继承自operationhandler,都还算比较的简单吧,无非就是多了各自多了一个方法,inboundhandler多了一个newInboundBuffer方法,用于创建buffer存放读取的数据,outboundhandler多了一个newOutboundBuffer方法。。。


好了,几个顶层的接口就算差不多这样了,,,接下来可以开始分析一下几个adapter什么的了。。。。

你可能感兴趣的:(java netty handler之ChannelInboundHander与ChannelOutboundHandler)