netty-channel-channelPipeline

ChannelPipeline

总体概念:
1、继续上篇文章,Channel 的所有的IO事件的结果封装类是 ChannelFuture ,产生结果后,同时会回 调 ChannelFutureListener
2、产生 ChannelFuture 的源头 定义在 Channel 接口, 具体处理事件的责任 全部 由 ChannelPipeline处理
3、ChannelPipeline 是一个链式结构,自然具有链表的基本功能,加入的对象是 ChannelHandlerContext 
4、ChannelHandlerContext 顾名思义是对 ChannelHandler 的上下文环境的封装,
目的是:(1)方便 同一个ChannelPipeline 下,所有的ChannelHandler之间交流
(2)方便ChannelPipeline 与 ChannelHandler之间交流
5、 ChannelHandlerContext 处理 Channel IO 事件,根据不同的事件类型,会回调  ChannelHandler 
  
一、Channel 的类图
   (1)第一层:定义基本功能接口
   (2)第二层:抽象层 , 半实现,新增加
a. 新建一个Channel时,就创建了ChannelPipeline
    (3)第三层:针对不同的应用场景继续 抽象 或 实现 二 netty-channel-channelPipeline
 二、ChannelPipeline如何 处理  channel 的 事件的?

1、ChannelPipeline 的 创建
netty-channel-channelPipeline

2、ChannelPipeline 链表增加  表面是增加 ChannelHandler,  实际封装后是 ChannelHandlerContext 
(1) 两种增加方式:立刻增加,延迟增加(被其他事件发生时,回调增加)
(2)增加时,加锁控制 ,多个线程同时 向 同一个 Pipepline里增加Context 
  netty-channel-channelPipeline
  
3、是 inBound 事件 还是 outBound 事件 ?
(1) ChannelFuture  bind(SocketAddress )  是 outBound 事件,会由 ChannelOutBoundHandler处理
    调用线: ChannelPipeline =》ChannelHandlerContext => 具体的 ChannelHandler ,
   处理事件后,
  (1)ChannelPipeline 会回调 ChannelHandlerContext 的事件方法,告诉 handlers 
  (2)ChannelFuture 结果,会通知他所有的监听者

netty-channel-channelPipeline