Netty之4Channel
Posted Program进阶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty之4Channel相关的知识,希望对你有一定的参考价值。
从源码架构层面可以发现,大多数源码的设计都可以分为三层:接口层、abstract层、defualt实现层如下面三层图。其中最上层是接口,定义服务规范,用于外部使用,即面向接口编程;abstract层聚合上层接口方法,并对通用方法进行实现;最底层则进行标准通用的default实现。这样的好处很明显,即可以保证框架的拿来即用的稳定便捷,又可以友好的扩展。
关于Netty数据传输的核心组件Channel、ChannelHandler、ChannelHandlerContext、ChannelPipeline 这四个组件之间的关系:
Channel 是对网络IO操作的抽象封装接口,Channel的设计为用户提供了客户端和服务端IO操作的统一视图,这对于原生JDK NIO模型来说是一种很大的改进,提高了操作的便捷性,并且与Netty模型融合更好,Channel所包含的方法如图:
可以看到Channel定义的方法有获取ChannelId, 读写方法,获取该Channel对应注册的EventLoop等方法。具体方法和实现可以查看相关API。Channel两个常用实现子类图如:
根据上面4Channel之间的关系图可以很好理解出,网络数据读入Channel之后,或者网络数据写出Channel之前,都需要通过ChannelPipeline容器,并且经过ChannelHandler顺序链的各种数据过滤或逻辑处理(编解码、TCP粘包拆包等),而这些数据都需要通过ChannelHandlerContext实例进行连接传递,也因此,在ChannelPipeline中可以通过ChannelHandlerContext进行动态添加或跳过ChannelHandler处理链。
通过三个接口中定义的方法,我们可以看出ChannelPipeline容器中的操作主要是在ChannelHandlerContext和ChannelPipeline之间,而ChannelHandler的操作主要是通过对应的ChannelHandlerContext实例实现的,对于每个方法的操作可以根据API进一步了解。
以上是关于Netty之4Channel的主要内容,如果未能解决你的问题,请参考以下文章