例如,假设我们创建了以下管道:
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast("1", new InboundHandlerA());
p.addLast("2", new InboundHandlerB());
p.addLast("3", new OutboundHandlerA());
p.addLast("4", new OutboundHandlerB());
p.addLast("5", new InboundOutboundHandlerX());
}
在上面的例子中,名称以Inbound开头的类意味着它是一个入站处理程序。
名称以Outbound开头的类表示它是一个Outbound处理程序
在给定的示例配置中,当事件进入到入站时,处理程序计算顺序为1、2、3、4、5(代码行:从上到下)。
当一个事件出站时,顺序是5、4、3、2、1(代码行:从下到上)。
在这个原则之上,ChannelPipeline跳过某些处理程序的评估,以缩短堆栈深度:
3和4没有实现ChannelInboundHandler,因此没有实现入站的实际计算顺序事件将是:1,2,5。
1和2没有实现ChannelOutboundHandler,因此a的实际求值顺序为出站事件为:5、4、3。
版权声明:本文为ffyyhh995511原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。