netty之ChannelPipeline

72 阅读1分钟

ChannelPipeline

本身是Intercepting Filter设计模式的一个实现

image.png

context与pipeline都实现了相同的接口 ChannelInboundInvoker, ChannelOutboundInvoker

  1. inBoundInvoker 负责fire通知
  2. outBoundInvoker 负责网络连接,数据读写

image.png

  1. 相当于FilterChain的职责,主要用来管理handler的移除(remove)与添加(add)以及替换(replace),同时保证handler之间的顺序
  2. 为了方便拓展,在定义handler的时候,我们为每个handler安排一个context(讲handler封装到context中即可)

addHandler方法 image.png newConext方法

image.png

updateContext方法

image.png

  1. 考虑到channelPipeline所对应的channel有可能尚未注册到eventloop中,所以添加一个callback来。待channel被注册后,进行回调处理

image.png

  1. 添加注册后回调的处理

image.png

image.png

  1. 添加handler之后的补充操作,要分成两种情况 判断条件就是 当前线程是否在eventloop中

image.png

通过线程池,构建一个线程去执行handler添加之后的操作 image.png

handler添加之后的处理 callHandlerAdded0

image.png

context的handler添加之后的补充方法

image.png

image.png

  1. 综上可知,添加handler之后的补充操作,实际上是handler自身的一种补充,但交给了context来管理

默认实现类DefaultChannelPipeline