繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM