2021SC@SDUSC
一、Netty 中的传播事件
在前面的博客中提到, AbstractChannelHandlerContext 中有 inbound 和 outbound 两个 boolean 变量,分别用于标识 Context 所对应的 handler 的类型:
1、inbound 为 true表示其对应的 ChannelHandler 是 ChannelInboundHandler 的子类。
2、outbound 为 true 表示对应的 ChannelHandler 是 ChannelOutboundHandler 的子类。
inbound 和 outbound 涉及ChannelPipeline 的事件传播,Netty 中的传播事件可以分为两种:Inbound 事件和 Outbound 事件
看一下ChannelInboundHandler、ChannelOutboundHandler两大方法的类图:
下面是官方文档中给出的图:
I/O Request
via Channel or
ChannelHandlerContext
|
+---------------------------------------------------+---------------+
| ChannelPipeline | |
| \|/ |
| +---------------------+ +-----------+----------+ |
| | Inbound Handler N | | Outbound Handler 1 | |
| +----------+----------+ +-----------+----------+ |
| /|\ | |
| | \|/ |
| +----------+----------+ +-----------+----------+ |
| | Inbound Handler N-1 | | Outbound Handler 2 | |
| +----------+----------+ +-----------+----------+ |
| /|\ . |
| . . |
| ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()|
| [ method call] [method call] |
| . . |
| . \|/ |
| +----------+--------