Netty系列Netty组件之ChannelPipeline与ChannelHandler

Pipeline和ChannelHandler关系介绍

ChannelPipeline和ChannelHandler是Netty在进行业务处理时的重要组成组件,简单来说,ChannelHandler是进行一个业务处理的处理器,而Pipeline负责将一个个的处理器串联起来,相当于一个容器,Channel中的数据会进入Pipeline,在容器中的各个处理器中按照顺序进行流转。

ChannelPipelie和ChannelHandler的关系图示:

在Netty中,一个请求会创建一个Channel通道,每个Channel会绑定一个Pipeline,Pipeline是一个双向链表结构,它们是一一对应的关系。ChannelHandlerContext是ChannelHandler的上下文对象,通过该对象可以获取处理器的上下文信息,如:绑定的Channel、Pipeline等。

Netty的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的定制。

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

ChannelPipeline

ChannelPipeline是ChannelHandler的容器,它负责ChannelHandler的管理和事件拦截。

事件处理

ChannelPipeline事件处理的流程:

  • 底层的SocketChannel read()方法读取ByteBuf,触发ChannelRead事件,由I/O线程NioEventLoop调用ChannelPipeline的fireChannelRead(Object msg)方法,将消息(ByteBuf)传输到ChannelPipeline中
  • 消息依次被ChannelPipeline中的处理器:(例如)HeadHandler、ChannelHandler1、ChannelHandler2....TailHandler拦截和处理,在这个过程中,任何ChannelHandler都可以中断当前的流程,
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值