channel的构成
- 本身乃是一种层级结构 不放认为是一种可以向前追溯的链表
- 每个channel都有一个唯一id作为标记
- 实例一个Chnnanel的必要四个变量
- parent 用于向上追溯
- id 唯一标记 可用来排序
- unsafe 用于实际的transport操作 是每个channel的迈出第一步的关键 相当于他的生命周期管理 以及数据的分配 销毁处理
- pipeline 构建handlers
- channel是有状态的 是否注册 是否open 是否active
- channel是有config可以配置的
- 同时我们也必须要有channel元数据来表述channel
以上只是channel的构成元素,下面表述channel功能
channel 功能
- 读/写/connect/disconnect/bind/
- 衍生出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