并发编程 | Netty - [出站、入站机制]

§1 出站 & 入站

Netty 是通过由多个 Handler 组成的链处理所有通信的
多个 Handler 组成的链即 Pipeline
Handler 本身是具有方向的,通常认为以 为处理重点的是 入站,以 为处理重点的是 出站
如下图
在这里插入图片描述

如何理解出站 & 入站

  • 概括的讲
    • 从当前程序端发出的是 出站,通常需要写
    • 进入当前程序端的是 入站,通常需要读
  • 出站、入站是一个相对的概念,随程序端的不同而变化
    • 站在 Client,Client -> Server 是 ==出站 ==
    • 站在 Server,Server -> Client 是 出站
  • 并不是 S->C 是出站、C->S 是入站

如下图所示
在这里插入图片描述

出站 & 入站的影响

  • 经过不同方向的 Handler
    • 出站需要经过 OutBoundHandler
    • 入站需要经过 InBoundHandler
  • 不同的编解码需求
    • 出站通常需要编码
    • 入站通常需要解码

§2 Pipeline & ChannelPipeline

作用

  • 作为 Handler 的集合,负责处理、拦截出入站 IO 事件
  • 很类似过滤器栈,责任链模式
  • 可以完全控制 IO 事件的处理方式,并控制各个 ChannelHandler 如何相互调用

结构

  • 每个 Channel 都有且仅有一个 Pipeline
    二者关系参考 并发编程 | Netty - [Reactor 模型]
  • ChannelPipeline 本质上是一个双向链表
  • 链表的节点类型是 ChannelHandlerContextChannelHandlerContext 内部是 ChannelHandler
  • 通常不同 Pipeline 中的 ChannelHandler 不共享
    技术上是可以做到共享的,但是一旦共享就需要处理线程安全问题,影响性能
  • 入站、出站的 ChannelHandler 在同一个链表中,但不会互相影响,Handler 与当前操作不符时会直接放行

在这里插入图片描述

常用方法
头部追加 Handler
addFirst()

尾部追加 Handler
addLast()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值