1

LengthFieldBasedFrameDecoderNetty の ZlibDecodersなどで区切り文字を使用する必要がありますか? デコーダーが「不明な圧縮方法」でエラーになることがあるという問題がありましたが、パイプラインを変更してデータを区切ると、これはなくなりました。Zlib エンコーダー/デコーダーの javadoc では、これが必須であるとは言及されていませんが、それらのスーパー クラスでは言及されています。

4

2 に答える 2

2

これは、トランスポート プロトコルと、メッセージ/フレームに圧縮が適用される方法に依存します。

  • 以下のように (http のように) コンテンツ部分のみに圧縮が適用される場合、LengthFieldBasedFrameDecoder は必要ありません。これは、デコーダー/エンコーダーが ZlibDecoder/ZlibEncoder で DecoderEmbedder/EncoderEmbedder を内部的に使用する必要があるためです。

      +-----+---------------+
      |     |               |
      | HDR |  Content      |
      |     |               |
      +-----+---------------+
    
  • 圧縮がフレーム全体に適用され、トランスポート プロトコルが TCP の場合、圧縮されたフレームには、完全に読み取るためのメッセージ長を識別するヘッダー パラメータが必要です。したがって、パイプラインに LengthFieldBasedFrameDecoder と LengthFieldPrepender が必要になります

      +---------------------+       +------+-------------+
      |                     |       |      |             |
      |      Frame          | <=>   |Length| Zipped Frame|
      |                     |       |      |             |
      +---------------------+       +------+-------------+
    
于 2012-06-06T19:26:43.400 に答える
1

いいえ、必要ありません。実際、ZlibDecoder/ZlibEncoder は通常、そのようなハンドラの「前」に配置されます。

于 2012-06-06T05:35:21.810 に答える