inbound outbound 加载顺序和执行顺序
inbound outbound 加载顺序和执行顺序
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
Netty 是一个高性能的异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在 Netty 中,处理网络事件的核心组件是 ChannelPipeline
,它持有一系列的 ChannelHandler
。这些处理器分为两类:Inbound
(入站)和 Outbound
(出站)。
ChannelHandler 类型
- InboundHandler:用于处理入站数据以及各种状态变化事件。
- OutboundHandler:用于处理出站操作,例如打开连接、发送数据等。
加载顺序
在 Netty 中,ChannelHandler
的加载顺序是按照你添加它们到 ChannelPipeline
的顺序来的。例如:
1 | ChannelPipeline pipeline = channel.pipeline(); |
在这个例子中,InboundHandler1
和 InboundHandler2
是入站处理器,它们会首先被添加到管道中,随后是出站处理器 OutboundHandler1
和 OutboundHandler2
。
执行顺序
入站事件(Inbound)
入站事件,如读取数据(channelRead
),会从 ChannelPipeline
的头部开始,并按照添加的顺序向下传递给每个 InboundHandler
。如果一个 InboundHandler
没有调用 ChannelHandlerContext
的 fireChannelRead
方法,那么入站事件将停止流动,不会传递给下一个处理器。
执行顺序示例:
1 | InboundHandler1 -> InboundHandler2 |
出站事件(Outbound)
出站事件,如写数据(write
)或关闭连接(close
),会从 ChannelPipeline
的尾部开始,并按照添加的相反顺序向上传递给每个 OutboundHandler
。如果一个 OutboundHandler
没有调用 ChannelHandlerContext
的相应出站方法,那么出站事件将停止流动,不会传递给上一个处理器。
执行顺序示例:
1 | OutboundHandler2 -> OutboundHandler1 |
小结
在 Netty 中,ChannelHandler
的加载顺序是按照它们被添加到 ChannelPipeline
的顺序,而执行顺序则是入站事件按照添加顺序,出站事件按照相反的顺序。理解这个顺序对于设计 Netty 的网络应用程序是非常重要的,因为它影响到数据的处理流程和逻辑。