netty之channel

70 阅读1分钟

channel的构成

image.png

  • 本身乃是一种层级结构 不放认为是一种可以向前追溯的链表
  • 每个channel都有一个唯一id作为标记

image.png

  • 实例一个Chnnanel的必要四个变量
  1. parent 用于向上追溯
  2. id 唯一标记 可用来排序
  3. unsafe 用于实际的transport操作 是每个channel的迈出第一步的关键 相当于他的生命周期管理 以及数据的分配 销毁处理
  4. pipeline 构建handlers

image.png

  1. channel是有状态的 是否注册 是否open 是否active
  2. channel是有config可以配置的
  3. 同时我们也必须要有channel元数据来表述channel

以上只是channel的构成元素,下面表述channel功能

channel 功能

  1. 读/写/connect/disconnect/bind/
  2. 衍生出flush close closeForcely 这些果断不可避免的操作

如何实现channel功能

channel将自己注册到eventloop中

执行时序图

sequenceDiagram
Channel->>Unsafe:the first step to  start channel some action 
Channel->>ChannelPipeline: do some action eg:bind
ChannelPipeline->>ChannelContext: do some action eg:bind
ChannelContext->>ChannelHandler: the last step do really what to do eg:bind 
Unsafe-->>Channel: the last step to end channel some action