刚开始写 netty 的时候, 会对 pipeline 很疑惑, 其实并不复杂。
netty 4 pipeline 图解
首先看一下 event 是如何流动的:
不过更好的说明是在 Java Document 中, 推荐阅读一下, 很有帮助: io.netty.channel.ChannelPipeline
How an event flows in a pipeline
The following diagram describes how I/O events are processed by ChannelHandlers in a ChannelPipeline typically. An I/O event is handled by either a ChannelInboundHandler or a ChannelOutboundHandler and be forwarded to its closest handler by calling the event propagation methods defined in ChannelHandlerContext, such as ChannelHandlerContext.fireChannelRead(Object) and ChannelHandlerContext.write(Object).
...
这个图更形象:
|
写代码
那么, 在代码中如何体现这种顺序呢 ?
如下所示 :
ChannelPipeline p = ...; |
当 inbound event 到来时, handler 顺序是 12345, 而 outbound 时, 顺序是 54321.
不过:
- 因为3和4没有实现
ChannelInboundHandler
, 所以 inbound 事件的顺序是 125
- 因为1和2没有实现
ChannelOutboundHandler
, 所以outbound时间是543 - 因为5实现了
ChannelInboundHandler
和ChannelOutboundHandler
, 所以 inbound 和 outbound event 都会经过.