在我的应用程序中,我需要在套接字上接收一个字节数组,将其解析为HttpRequest来执行一些检查,如果检查通过,请返回该字节数组并执行更多工作。

该应用程序基于NETTY(这是必需的)。

我的第一个想法是创建这样的管道:


HttpRequestDecoder(从ByteBuf解码为HttpRequest)
MyHttpRequestHandler(对HttpRequest进行我自己的检查)
HttpRequestEncoder(将HttpRequest编码为ByteBuf)
MyButeBufHandler(使用ByteBuf进行工作)


但是,HttpRequestEncoder扩展了ChannelOutboundHandlerAdapter,因此不会为入站数据调用它。

如何完成这项任务?
避免解码和重新编码请求会很好。

问候,
马西米利亚诺

最佳答案

EmbeddedChannel中使用MyHttpRequestHandler

EmbeddedChannel ch = new EmbeddedChannel(new HttpRequestEncoder());
   ch.writeOutbound(msg);
   ByteBuf编码= ch.readOutbound();

您必须将EmbeddedChannel保留为MyHttpRequestEncoder的成员变量,因为HttpRequestEncoder是有状态的。另外,在使用完EmbeddedChannel后,请关闭它(可能在channelInactive()方法中)。

10-04 21:09