2012-02-24 4 views
0

私は、0で終了するエンティティからなるHTTPレスポンスを持っています。NOOB:HttpClientCodecにDelimiterBasedFrameDecoderを結ぶ

私は各0終了エンティティを個別に扱いたいと思います。明らかにそうする方法は、DelimiterBasedFrameDecoderにフックするように見えます。

ただし、HttpClientCodecの後、メッセージはHttpResponseまたはHttpChunkですが、DelimiterBasedFrameDecoder(任意のFrameDecoder)は生のChannelBufferで操作する必要があります。

私は何か一緒にハックすることができると確信していますが、私はこれを行うための「正しい」方法を知りたいと思います。 「権利」は、エレガントで正確で、Nettyの「精神」として様々に定義されているかもしれません。

これがあまりにも素朴であれば謝罪してください。アプリケーションが直接自分のワイヤー/フレーム形式でTCP/UDPを使用する場合

ローランド

答えて

0

FrameDecodersは非常に便利です。このタイプのデコードにそれらを使用するには、DefaultHttpResponseをChannelBufferに変換するOneToOneDecoderハンドラが必要です。アプリケーションが不正な応答を受け取っている場合は、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())); 
    ...  
+0

ありがとうございます! HTTPサーバーのデコードパイプラインを提示したと思いますか?私のアプリは、チャンクされた応答を受け取るHTTPクライアントです。そして、私は彼らが到着するときにチャンクを処理したいです。私は、完全なメッセージが完了するまでHttpChunkAggregatorが停止することを想定していますか? 「単純なアップストリームハンドラをデコードする方が好きですか? –

+0

はい、あなたは正しいです:)、私はそれを更新しました。 HttpChunkAggregatorは、最後のチャンクが受信されるまで待ってから、完全なHttpResponseでメッセージイベントを発生させます。私が単純なアップストリームハンドラを使用することは、パイプラインの最後の2つのハンドラを置き換える単純なアップストリームハンドラの実装を持つことができることです。 –

関連する問題