假设我在 netty 管道中有这些处理程序流:
UpHandler1 -> UpHandler2 -> UpHandler3 -> ... -> DownHandler1 -> DownHandler2 -> DownHandler3
基于某些条件(即已经找到对请求的响应而不进行进一步处理),在我的 UpHandler2 中,是否可以直接转到 DownHandler2 (因此跳过中间的某些上游和下游处理程序)?这是推荐的吗?
最佳答案
您可以使用UpHandler2的ChannelHandlerContext来检索ChannelPipeline。从这里,您可以使用 context(...) 方法之一检索任何 channel 处理程序的 channel 处理程序上下文。然后 Netty 3 的 sendDownstream 或 Netty 4 的 write 将转发到上下文响应的处理程序之后的下一个下游处理程序。实际上,我认为您需要获取 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);
可能有用。然而,这可能非常脆弱,并且还取决于您的处理逻辑是否允许。
关于java - 如何跳过某些处理程序并直接转到netty中的特定处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849936/