Netty之Pipeline与ChannelHandler

1、Pipeline与ChannelHandler通过责任链设计模式来组织代码逻辑,并且能够支持逻辑的动态添加和删除,Netty能够支持各类协议的扩展,比如HTTP、Websocket和Redis,靠的就是Pipeline和ChannelHandler。

2、无论从服务端来看,还是从客户端来看,在Netty的整个框架里面,一个连接对应着一个Channel。这个Channel的所有处理逻辑都在一个叫作ChannelPipeline的对象里,ChannelPipeline是双向链表结构,它和Channel之间是一对一的关系.

如下图所示,ChannelPipeline里的每个节点都是一个ChannelHandlerContext对象,这个对象能够获得和Channel相关的所有上下文信息。这个对象同时包含一个重要的对象,那就是逻辑处理器
ChannelHandler,每个ChannelHandler都处理一块独立的逻辑

 

12、ChannelHandler的分类

 

 第一个子接口是ChannelInboundHandler,从字面意思可以猜到,它是处理读数据的逻辑。比如在一端读到一段数据,首先要解析这段数据,然后对这段数据做一系列逻辑处理,最终把响应写到对端。在组装响应之前的所有处理逻辑,都可以放置在一系列ChannelInboundHandler里处理,它的一个最重要的方法就是channelRead()。读者可以将ChannelInboundHandler的逻辑处理过程TCP的七层协议解析过程联系起来,把收到的数据一层层地从物理层上升到应用层。

第二个子接口ChannelOutboundHandler是处理写数据的逻辑,它是定义一端在组装完响应之后把数据写到对端的逻辑。比如,我们封装好一个response对象后,有可能对这个response做一些其他特殊逻辑处理,然后编码成ByteBuf,最终写到对端。它最核心的方法就是write(),读者可以将ChannelOutboundHandler的逻辑处理过程与TCP的七层协议封装过程联系起来。我们在应用层组装响应之后,通过层层协议的封装,直到底层的物理层。

这两个子接口分别有对应的默认实现:
ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter,它们分别实现了两大子接口的所有功能,在默认情况下会把读写事件传播到下一个Handler
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值