Netty Pipeline和ChannelHandler

Netty 中的 pipeline 和 channelHandler:它通过责任链设计模式来组织代码逻辑,并且能够支持逻辑的动态添加和删除 .
Netty 能够支持各类协议的扩展,比如 HTTP,Websocket,Redis,靠的就是 pipeline 和 channelHandler

pipeline 与 channelHandler 的构成

一条连接对应着一个 Channel,这条 Channel 所有的处理逻辑都在一个叫做 ChannelPipeline 的对象里面,ChannelPipeline 是一个双向链表结构,他和 Channel 之间是一对一的关系。
ChannelPipeline 里面每个节点都是一个 ChannelHandlerContext 对象,这个对象能够拿到和 Channel 相关的所有的上下文信息,然后这个对象包着一个重要的对象,那就是逻辑处理器 ChannelHandler。

pipeline结构

pipeline执行顺序

总结:

  • channelHandler 分为 inBound 和 outBound 两种类型的接口,分别是处理数据读与数据写的逻辑,可与 tcp 协议栈联系起来

  • 两种类型的 handler 均有相应的默认实现,默认会把事件传递到下一个,这里的传递事件其实说白了就是把本 handler 的处理结果传递到下一个 handler 继续处理。

  • inBoundHandler 的执行顺序与我们实际的添加顺序相同,而 outBoundHandler 则相反。

分享到: