netty-channel-channelPipeline

本文详细解析了Netty中ChannelPipeline的工作原理及其内部机制,包括ChannelPipeline的创建、事件处理流程以及如何通过ChannelHandlerContext进行上下文通信。

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 结果,会通知他所有的监听者




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值