ChannelPipeline和ChannelHandler

本文详细介绍了Netty中的ChannelPipeline和ChannelHandler,ChannelPipeline作为ChannelHandler的容器,负责事件拦截与调度,而ChannelHandler则实现事件的处理。文章涵盖了ChannelPipeline的功能、事件处理、自定义拦截器构建、主要特性以及源码分析。此外,还阐述了ChannelHandler的职责、解码器如ByteToMessageDecoder和LengthFieldBasedFrameDecoder的工作原理,以及编码器如MessageToByteEncoder的功能。
摘要由CSDN通过智能技术生成

Channel过滤器实现原理与Servlet filter机制一致,它将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递。ChannelPipeline持有I/O事件拦截器ChannelHandler的链表,由ChannelHandler对I/O事件进行拦截和处理,可以方便的通过新增和删除ChannelHandler来实现不同的业务逻辑定制,不需要对已有的ChannelHandler进行修改,能够实现对修改封闭和对扩展的支持。

 

1、ChannelPipeline功能说明

ChannelPipeline是ChannelHandler的容器,他负责ChannelHandler的管理和时间拦截与调度。

 

2、ChannelPripeline的事件处理

1)底层的SocketChannel read()方法去读ByteBuf,触发ChannelRead事件,由I/O线程NioEventloop调用ChannelPipeline的fireChannelRead(Object msg)方法,将消息传输到ChannelPipeline中

2)消息依次被HeadHandler、ChannelHandler1、ChannelHandler2.……TailHandler拦截和处理,在这个过程中,任何ChannelHandler都可以中断当前的流程,结束消息的传递

3)调用ChannelHandlerContext的write方法发送消息,消息从TailHandler开始,途经ChannelHandlerN……ChannelHandler1,HeadHandler,最终被添加到消息发送缓冲区中等待刷新和发送,在此过程中也可以中断消息的传递

Netty的事件分为:inbound事件和outbound事件。

inbound事件通常由I/O线程触发,上图的左半部分;触发inbound事件的方法

①ChannelHandlerContext.fireChannelRegistered():Channel注册事件

②ChannelHandlerContext.fireChannelActive():TCP链路建立成功,Channel激活事件

③ChannelHandlerContext.fireChannelRead(Object):读事件

④ChannelHandlerContext.fireChannelReadComplete():读操作完成通知事件

⑤ChannelHandlerContext.fireExceptionCaught(Throwable):异常通知事件

⑥ChannelHandlerContext.fireUserEventTriggered(Object):用户自定义事件

⑦ChannelHandlerContext.fireChannelWritabilityChanged():Channel的可写状态变化通知事件

⑧ChannelHandlerContext.fireChannelInactive():TCP连接关闭,链路不可用通知事件

 

Outbound事件通常是由用户主动发起的网络I/O操作,上图对应的右半部分。触发Outbound事件的方法如下:

① ChannelHandlerContext.bind(SocketAddress, ChannelPromise):绑定本地地址事件

②ChannelHandlerContext.connect(SocketAddress, Soc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值