Java Netty:如何将对象传递给特定的处理程序?
我正在使用Netty编写一些http服务器 让我们想象一下,我有这样的东西(在初始化器中,所有处理程序都扩展了Java Netty:如何将对象传递给特定的处理程序?,java,netty,Java,Netty,我正在使用Netty编写一些http服务器 让我们想象一下,我有这样的东西(在初始化器中,所有处理程序都扩展了ChannelInboundHandlerAdapter): 我的问题是,我是否可以像这样将对象传递给特定的处理程序(例如,CreateEventHandler中的某个地方): 如果是,这是一个好办法吗?或者我肯定会得到一些开销或错误?或者我必须通过管道中的所有处理程序传递对象 谢谢。这不是设计应用程序的好方法。Netty定义了一系列处理程序,每个处理程序都可以转换通过它的数据。本质上,
ChannelInboundHandlerAdapter
):
我的问题是,我是否可以像这样将对象传递给特定的处理程序(例如,CreateEventHandler
中的某个地方):
如果是,这是一个好办法吗?或者我肯定会得到一些开销或错误?或者我必须通过管道中的所有处理程序传递对象
谢谢。这不是设计应用程序的好方法。Netty定义了一系列处理程序,每个处理程序都可以转换通过它的数据。本质上,传入/传出数据通过管道中的所有入站/出站处理程序传递。它不是一种“有条件的分派”机制,而这正是您所寻找的 看起来你正在建立一个休息服务;您只需要一个通用HTTP管道和一个入站处理程序,它将基于HTTP方法分派到您的应用程序代码中。这意味着示例中的处理程序(
GetEventHandler
etc)都不需要扩展ChannelInboundHandlerAdapter
——它们可以是没有netty特定代码的简单Java类。这将使您在协议和业务逻辑之间有一个很好的分离
// REST API handlers
pipeline.addLast(new CreateEventHandler());
pipeline.addLast(new GetEventHandler());
pipeline.addLast(new UpdateEventHandler());
pipeline.addLast("delete", new DeleteEventHandler());
ChannelInboundHandlerAdapter h = (ChannelInboundHandlerAdapter) ctx.pipeline().get("delete");
h.channelRead(ctx, msg);