NOOB:将DelimiterBasedFrameDecoder绑定到HttpClientCodec

时间:2012-02-24 15:17:48

标签: netty

我的HTTP响应包含一堆0终止的实体。

我希望单独处理每个0终止的实体,显而易见的方法似乎是挂钩DelimiterBasedFrameDecoder。

但是,在HttpClientCodec之后,消息是HttpResponse或HttpChunk,而DelimiterBasedFrameDecoder(好吧,任何FrameDecoder)都希望在原始ChannelBuffer上运行。

所以,虽然我有信心我可以一起破解某些东西,但我想知道这样做的'正确'方法。 “权利”可以被不同地定义为优雅,正确,并且符合Netty的“精神”。

道歉,如果这太天真了。

罗兰

1 个答案:

答案 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()));
  ...