[英]How to skip certain handlers and directly go to specific handler in netty
[英]Netty: how to pass an object to a specific handler?
我正在使用Netty编写一些http服务器。
假设我有这样的东西(在初始化程序中,所有处理程序都扩展ChannelInboundHandlerAdapter
):
// REST API handlers
pipeline.addLast(new CreateEventHandler());
pipeline.addLast(new GetEventHandler());
pipeline.addLast(new UpdateEventHandler());
pipeline.addLast("delete", new DeleteEventHandler());
我的问题是我可以将一个对象传递给这样的特定处理程序(例如,在CreateEventHandler
某个位置):
ChannelInboundHandlerAdapter h = (ChannelInboundHandlerAdapter) ctx.pipeline().get("delete");
h.channelRead(ctx, msg);
如果是,这是个好方法吗? 还是我保证会产生一些开销或错误? 还是我必须通过管道中的所有处理程序传递对象?
谢谢。
这不是设计应用程序的好方法。 Netty ChannelPipeline定义了一系列处理程序,每个处理程序都可以转换通过它的数据。 本质上,传入/传出的数据通过管道中的所有入站/出站处理程序传递。 这不是您正在寻找的“有条件分派”机制。
看起来您正在构建REST服务; 你需要的是一个通用的HTTP管道,和一个向内的处理程序,这将分派到基于HTTP方法的应用程序代码。 这意味着您的示例中的所有处理程序( GetEventHandler
等)都不需要扩展ChannelInboundHandlerAdapter
它们可以是没有netty特定代码的简单Java类。 这也将使您很好地区分协议和业务逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.