我的HTTP响应包含一堆0终止的实体。
我希望单独处理每个0终止的实体,显而易见的方法似乎是挂钩DelimiterBasedFrameDecoder。
但是,在HttpClientCodec之后,消息是HttpResponse或HttpChunk,而DelimiterBasedFrameDecoder(好吧,任何FrameDecoder)都希望在原始ChannelBuffer上运行。
所以,虽然我有信心我可以一起破解某些东西,但我想知道这样做的'正确'方法。 “权利”可以被不同地定义为优雅,正确,并且符合Netty的“精神”。
道歉,如果这太天真了。
罗兰
答案 0 :(得分:0)
当您的应用程序直接使用具有自己的线/帧格式的TCP / UDP时,FrameDecoders非常有用。将它们用于这种类型的解码将需要一个OneToOneDecoder处理程序,它将DefaultHttpResponse转换为ChannelBuffer。如果你的应用程序正在接收chucked响应,那么你必须在管道中添加一个HttpChunkAggregator。
我更喜欢有一个简单的上游处理程序来将DefaultHttpResponse解码为channelBuffer数组,无论如何你想要将解码与应用程序处理程序分开,你可以拥有以下管道。
pipeline.addLast("decoder", new HttpResponseDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));//optional
...
pipeline.addLast("encoder", new HttpRequestEncoder());
pipeline.addLast("oneToOneDecoder", new Http2ChannelBufferDecoder extends OneToOneDecoder {...})
...
pipeline.addLast("delimiterDecoder", new DelimiterBasedFrameDecoder(1048576, Delimiters.nulDelimiter()));
...