Java NIO框架-Netty-3 ChannelHandler & ChannelPipeline

ChannelInboundHandler

这是一个继承于ChannelHandler的处理接口,这个接口专门用于处理入站事件和数据

一般业务逻辑常在这个接口里实现。

ChannelPipeline

ChannelPipleline是容纳Channel Handler的链容器,所有事件都可以借由这个链条传递到链上所有的ChannelHandler。
每个Channel都有一个ChannelPipeline(可以通过Channel.pipeline()方法获得)。

ChannelHandler和ChannelPipeline的联合使用

流程:
1/ 将一个ChannelInitializer的实现注册到ServerBootstarp中
2/ 在ChannelInitializer.initChannel(SocketChannel ch)里,ch是连接到特定客户端的Channel,通过ch.pipeline()可以得到这个Channel上的链容器,通过ChannelPipeline.addLast方法即可将ChannelHandler添加到这个Channel的ChannelPipeline了。

ChannelHandler的继承关系如下:

可以看到,ChannelHandler主要有两类,一类是进站处理器(ChannelInboundHandler),一类是出站处理器(ChannelOutboundHandler)。毫无疑问,在一个Channel的ChannelPipleline上很可能回同时存在进站处理器和出站处理器。对应地,事件(数据)也分进站和出战,所以进站事件(数据)只能被进站处理器捕捉和处理,出站数据只能被出站处理器处理。

注意,对于入站事件(数据),事件传递的方向是顺着ChannelPipeline方向流动,直至ChannelPipeline的尾端,事件的所有处理就结束了。
出站时间(数据)正好相反,事件从ChannelPipeline的尾端开始流动,到达直至到达ChannelPipeline的头部,之后就达到网络层(Socket)。
上面介绍的ChannelPipeline.addLast就是将一个ChannelHandler添加到链条尾部的方法。


在这个链结构中,如果需要在不同的ChannelHandler间传递数据,有两种方法
1/ 直接将这个数据写在Channel中,这样这个数据就类似于出站数据,将从尾部开始流动
2/ 将数据写在ChannelHandlerContext中,这样数据将从当前的Channel Handler开始流动

关于ChannelHandlerAdapte

这些Adapter是对ChannelHandler的默认实现,直接使用可以降低从头实现这些ChannelHandler的难度。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值