假设我在netty管道中有这些处理程序流:
UpHandler1 - > UpHandler2 - > UpHandler3 - > ... - > DownHandler1 - > DownHandler2 - > DownHandler3
基于某些条件(即已经找到对请求的响应而不进行进一步处理),无论如何,在我的UpHandler2中,我可以直接转到DownHandler2(因此跳过某些上游和下游处理程序)?这是推荐的吗?
答案 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);
可能会奏效。然而,这可能非常脆弱,也取决于您的处理逻辑是否允许它。