什么是 Netty 的 ChannelPipeline,它是如何工作的?

 作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题


代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等


联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等

释放21集全网最深ConcurrentHashMap的vip视频,复现每一行源码

回答

ChannelPipeline 是 Netty 的核心处理链,用于实现网络事件的动态编排和有序传播。它负责组织和编排各种 ChannelHandler,使他们能够有序地组织在一起,这些 ChannelHandler 用于处理具体的业务逻辑和数据加工逻辑。

每一个 Channel 在创建时都会被赋予一个新的 ChannelPipeline,这个 ChannelPipeline 包含了一系列的 ChannelHandler。当该 Channel 发生 I/O 事件后,这个事件会沿着 ChannelPipeline 中的 ChannelHandler 链进行传播。传播的顺序如下:

  • 对于入站数据(如收到数据),事件会从 ChannelPipeline 的头部开始,依次经过每个 ChannelHandler。
  • 对于出站操作(如,写数据或关闭连接),事件会从 ChannelPipeline 的尾部开始,向前传递给每个 ChannelHandler。

ChannelHandler 是 Netty 的数据加工厂,用于处理实际业务逻辑的处理器,它有两个主要的子类型:ChannelInboundHandler 用于处理入站数据和事件,ChannelOutboundHandler 用于处理出站数据和操作。

所以,ChannelPipeline 的主要作用是管理和执行 ChannelHandler,确保它们按照正确的顺序和方式进行事件处理。

扩展

ChannelPipeline 概述

pipeline 翻译为管道、流水线,在 Netty 这个大工厂中,ChannelPipeline 就像一条流水线,数据流过 ChannelPipeline,被一步一步地加工,最后得到一个成熟的工艺品。

在 Netty 中,ChannelPipeline 是 Netty 的核心处理链,用于实现网络时间的动态编排和有序传播。它负责组织和编排各种 ChannelHandler,使他们能够有序地组织在一起,但实际的数据加工还是由 ChannelHandler 处理。

ChannelPipeline 的内部结构

ChannelPipeline 可以看作是 ChannelHandler 的容器载体,它是由一组 ChannelHandler 有序地组成的双向拦截链。每当新建一个 Channel 时都会新建一个 ChannelPipeline 与之绑定,而且这种绑定关系是永久的,当该 Channel 有 I/O 读写事件发生时,数据会贯穿整个 ChannelPipeline ,由里面的 ChannelHandler 依次拦截和处理。

注:在 Netty 中,ChannelHandler 是没有这种关系,每个 ChannelHandler 是互相独立的,他们在代码实现上是不会组成一个双向链表的,双向链表是由 ChannelHandlerContext 构成的 。

我们知道 ChannelHandler 分为出站 handler 和入站 handler ,但是 ChannelPipeline 并没有将他们分开,而是将出站 handler 和入站handler 混编在一起的,当一个入站事件从 ChannelPipeline 的头部向尾部开始传播的时候,每一个 ChannelHandler 都会判断下一个 ChannelHandler 的类型是否与当前 ChannelHandler 的类型相同,如果是则将事件传播给他,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值