如何跳过某些处理程序并直接转到netty中的特定处理程序

时间:2013-12-31 00:38:47

标签: java proxy netty

假设我在netty管道中有这些处理程序流:

UpHandler1 - > UpHandler2 - > UpHandler3 - > ... - > DownHandler1 - > DownHandler2 - > DownHandler3

基于某些条件(即已经找到对请求的响应而不进行进一步处理),无论如何,在我的UpHandler2中,我可以直接转到DownHandler2(因此跳过某些上游和下游处理程序)?这是推荐的吗?

1 个答案:

答案 0 :(得分:3)

您可以使用UpHandler2的ChannelHandlerContext来检索ChannelPipeline。从这里,您可以使用上下文(...)方法之一检索任何通道处理程序的通道处理程序上下文。然后sendDownstream for Netty 3或者为Netty 4编写,将在上下文响应的处理程序之后转发到下一个下游处理程序。实际上我认为你需要为DownHandler1获取ChannelHandlerContext并使用它来编写你的消息。

或者,您可以构建netty管道,以便DownHandler2是UpHandler2的下一个下游处理程序。如果我已正确理解您的管道,那么

pipeline.addLast("down3", downhandler3);
pipeline.addLast('up1", uphandler1);
pipeline.addLast("down2", downhandler2);
pipeline.addLast("up2", uphandler2);
pipeline.addLast("down1", downhandler1);
pipeline.addLast("up3", uphandler3);

可能会奏效。然而,这可能非常脆弱,也取决于您的处理逻辑是否允许它。