ChannelPipeline接口

每一个新创建的Channel都将会被分配一个新的ChannelPipeline,这项关联是永久性的。
Channel既不能附加另外一个ChannelPipeline,也不能分离当前的,在Netty的生命周期中,这是一项固定的操作,不需要开发人员的任何干预。
根据事件的起源,事件被Inbound或者Outbound处理,随后通过调用ChannelHandlerContext实现,它将被转发给同一超类型的下一个ChannelHandler。
ChannelPileline作为ChannelHandler链,运动方向总是从左至右或者从右至左,比如入站是从左至由(头部到尾部),出站是从右至左(尾部到头部),且ChannelHandler依次从左至右编码保持顺序,在Pipeline传播事件时,会测试Pipeline中的下一个ChannelHandler类型是否和运动方向匹配,如果不匹配的会跳过该ChannelHandler到下一个,直到匹配到期望方向的ChannelHandler为止(ChannelHandler可以同时实现Inbound和Outbound)

修改ChannelPipeline

调用Pipeline上相关的方法,可以添加、删除或者替换其他的ChannelHandler,从而实时的修改Pipeline的布局。
Pipeline自身的操作方法:

名称 描述
addFirst
addBefore
addAfter
addLast
将一个ChannelHandler添加到Pipeline中
remove 将一个ChannelHandler从Pipeline中移除
replace 将Pipeline中的一个ChannelHandler替换为另一个ChannelHandler

访问ChannelHandler的方法:

名称 描述
get 通过类型或者名称返回ChannelHandler
context 返回和ChannelHandler绑定的ChannelHandlerContext
names 返回Pipeline中所有ChannelHandler的名称

Pipeline事件触发

以fire开头的方法均是入站操作时调用的,fire方法的实现默认都会调用指向为next的以保证ChannelHandler的传播,bind、write这些是出站操作,和入站相反,方法实现中会通过调用指向为head的保证ChannelHandler 的传播。

  • Pipeline保存了与Channel相关联的Channelhandler
  • Pipleline可以根据需要,通过添加或者删除ChannelHandler来动态的修改
  • Pipeline有着丰富的API用以被调用,以响应入站和出站事件