在我的应用程序中,我需要在套接字上接收一个字节数组,将其解析为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()
方法中)。