Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netty:如何将对象传递给特定的处理程序?_Java_Netty - Fatal编程技术网

Java Netty:如何将对象传递给特定的处理程序?

Java Netty:如何将对象传递给特定的处理程序?,java,netty,Java,Netty,我正在使用Netty编写一些http服务器 让我们想象一下,我有这样的东西(在初始化器中,所有处理程序都扩展了ChannelInboundHandlerAdapter): 我的问题是,我是否可以像这样将对象传递给特定的处理程序(例如,CreateEventHandler中的某个地方): 如果是,这是一个好办法吗?或者我肯定会得到一些开销或错误?或者我必须通过管道中的所有处理程序传递对象 谢谢。这不是设计应用程序的好方法。Netty定义了一系列处理程序,每个处理程序都可以转换通过它的数据。本质上,

我正在使用Netty编写一些http服务器

让我们想象一下,我有这样的东西(在初始化器中,所有处理程序都扩展了
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);