标签:依次 发送 byte nbsp pre 倒序 节点 地方 遍历
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] |
| . . |
| . \|/ |
| +----------+----------+ +-----------+----------+ |
| | Inbound Handler 2 | | Outbound Handler M-1 | |
| +----------+----------+ +-----------+----------+ |
| /|\ | |
| | \|/ |
| +----------+----------+ +-----------+----------+ |
| | Inbound Handler 1 | | Outbound Handler M | |
| +----------+----------+ +-----------+----------+ |
| /|\ | |
+---------------+-----------------------------------+---------------+
| \|/
+---------------+-----------------------------------+---------------+
| | | |
| [ Socket.read() ] [ Socket.write() ] |
| |
| Netty Internal I/O Threads (Transport Implementation) |
+-------------------------------------------------------------------+
入站事件由入站处理程序按自下而上的方向进行处理,如图中左侧所示。入站处理程序通常处理图底部的IO线程生成的入站数据。通常通过实际的输入操作(例如{@link SocketChannelread(ByteBuffer)})从远程对等方读取入站数据。如果入站事件超出了顶部入站处理程序的范围,则将其静默丢弃,或者在需要引起注意时将其记录下来。
出站事件由出站处理程序按自上而下的方向进行处理,如图中右侧所示。出站处理程序通常会生成或转换出站流量,例如写请求。如果出站事件超出了底部出站处理程序,则由与Channel关联的IO线程处理。 IO线程通常执行实际的输出操作,例如{@link SocketChannelwrite(ByteBuffer)}。
以上摘自ChannelPipeline.java上的注释
部分内容参考关于Netty Handler入站出站机制详解
标签:依次 发送 byte nbsp pre 倒序 节点 地方 遍历
原文地址:https://www.cnblogs.com/fanxia/p/14184095.html