Netty核心组件之4Channel

本文介绍了Netty框架中的核心组件Channel,它作为网络IO操作的抽象接口,提供了客户端和服务端IO操作的统一视图。Channel包含了读写、获取ChannelId等方法。数据在进出Channel时,会通过ChannelPipeline经过ChannelHandler的处理。ChannelHandlerContext在ChannelPipeline和ChannelHandler间起着桥梁作用,允许动态管理处理链。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从源码架构层面可以发现,大多数源码的设计都可以分为三层:接口层、abstract层、defualt实现层如下面三层图。其中最上层是接口,定义服务规范,用于外部使用,即面向接口编程;abstract层聚合上层接口方法,并对通用方法进行实现;最底层则进行标准通用的default实现。这样的好处很明显,即可以保证框架的拿来即用的稳定便捷,又可以友好的扩展。

代码框架结构图
代码架构图

关于Netty数据传输的核心组件Channel、ChannelHandler、ChannelHandlerContext、ChannelPipeline 这四个组件之间的关系:

channel四组件关系
channel四组件关系

Channel 是对网络IO操作的抽象封装接口,Channel的设计为用户提供了客户端和服务端IO操作的统一视图,这对于原生JDK NIO模型来说是一种很大的改进,提高了操作的便捷性,并且与Netty模型融合更好,Channel所包含的方法如图:

Channel接口类图

 可以看到Channel定义的方法有获取ChannelId, 读写方法,获取该Channel对应注册的EventLoop等方法。具体方法和实现可以查看相关API。Channel两个常用实现子类图如:

NioServerSocketChannel&NioSocketChannel类图

 

根据上面4Channel之间的关系图可以很好理解出,网络数据读入Channel之后,或者网络数据写出Channel之前,都需要通过ChannelPipeline容器,并且经过ChannelHandler顺序链的各种数据过滤或逻辑处理(编解码、TCP粘包拆包等),而这些数据都需要通过ChannelHandlerContext实例进行连接传递,也因此,在ChannelPipeline中可以通过ChannelHandlerContext进行动态添加或跳过ChannelHandler处理链。

ChannelHandlerContext接口
ChannelHandler接口
ChannelPipeline接口

通过三个接口中定义的方法,我们可以看出ChannelPipeline容器中的操作主要是在ChannelHandlerContext和ChannelPipeline之间,而ChannelHandler的操作主要是通过对应的ChannelHandlerContext实例实现的,对于每个方法的操作可以根据API进一步了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值