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

Java 如何跳过某些处理程序并直接转到netty中的特定处理程序,java,proxy,netty,Java,Proxy,Netty,假设我在netty管道中有这些处理程序流: UpHandler1->UpHandler2->UpHandler3->…->下把手1->下把手2->下把手3 基于某些条件(即已找到对请求的响应,而不进行进一步处理),在我的UpHandler2中,是否仍然可以直接转到DownHandler2(因此跳过中间的某些上游和下游处理程序)?建议这样做吗?您可以使用UpHandler2的ChannelHandlerContext检索ChannelPipeline。从这里,您可以使用上下文(…)方法之一检索任何

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

UpHandler1->UpHandler2->UpHandler3->…->下把手1->下把手2->下把手3


基于某些条件(即已找到对请求的响应,而不进行进一步处理),在我的UpHandler2中,是否仍然可以直接转到DownHandler2(因此跳过中间的某些上游和下游处理程序)?建议这样做吗?

您可以使用UpHandler2的ChannelHandlerContext检索ChannelPipeline。从这里,您可以使用上下文(…)方法之一检索任何通道处理程序的通道处理程序上下文。然后,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);

可能有用。但是,这可能非常脆弱,还取决于处理逻辑是否允许。您可以使用UpHandler2的ChannelHandlerContext检索ChannelPipeline。从这里,您可以使用上下文(…)方法之一检索任何通道处理程序的通道处理程序上下文。然后,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);

可能有用。但是,这可能非常脆弱,还取决于处理逻辑是否允许。您可以使用UpHandler2的ChannelHandlerContext检索ChannelPipeline。从这里,您可以使用上下文(…)方法之一检索任何通道处理程序的通道处理程序上下文。然后,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);

可能有用。但是,这可能非常脆弱,还取决于处理逻辑是否允许。您可以使用UpHandler2的ChannelHandlerContext检索ChannelPipeline。从这里,您可以使用上下文(…)方法之一检索任何通道处理程序的通道处理程序上下文。然后,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);

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

没有完全理解您答案中“可选”部分的要点。这有助于将消息从uphandler2传递到downhandler2吗?我不太明白你答案中“可选”部分的意思。这有助于将消息从uphandler2传递到downhandler2吗?我不太明白你答案中“可选”部分的意思。这有助于将消息从uphandler2传递到downhandler2吗?我不太明白你答案中“可选”部分的意思。这对将消息从uphandler2传递到downhandler2有什么帮助?