netty-channel-channelPipeline

xiaoxiao2021-02-28  97

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)第三层:针对不同的应用场景继续 抽象 或 实现 二  二、ChannelPipeline如何 处理  channel 的 事件的? 1、ChannelPipeline 的 创建 2、ChannelPipeline 链表增加  表面是增加 ChannelHandler,  实际封装后是 ChannelHandlerContext  (1) 两种增加方式:立刻增加,延迟增加(被其他事件发生时,回调增加) (2)增加时,加锁控制 ,多个线程同时 向 同一个 Pipepline里增加Context        3、是 inBound 事件 还是 outBound 事件 ? (1) ChannelFuture  bind(SocketAddress )  是 outBound 事件,会由 ChannelOutBoundHandler处理     调用线: ChannelPipeline =》 ChannelHandlerContext =>  具体的 ChannelHandler ,    处理事件后,   (1)ChannelPipeline 会回调 ChannelHandlerContext 的事件方法,告诉 handlers    (2)ChannelFuture 结果,会通知他所有的监听者
转载请注明原文地址: https://www.6miu.com/read-73131.html

最新回复(0)