java netty handler之ChannelInboundHander与ChannelOutboundHandler

本文深入探讨Netty的Handler体系,重点分析ChannelInboundHandler(状态处理器)和ChannelOutboundHandler(操作处理器)。ChannelInboundHandler在通道状态变化时调用相应方法,如数据读取后的处理。而ChannelOutboundHandler主要用于数据发送,通过flush方法将数据从缓冲区传出,并包含一个unsafe对象以直接操作通道。了解这两个接口对于理解Netty的事件处理至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

上面的是整个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什么的了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值