是否有必要在Netty的ZlibDecoders中使用LengthFieldBasedFrameDecoder
等分隔符?我有一个问题,解码器有时会出现“未知压缩方法”错误,当我修改管道以分隔数据时,这就消失了。 Zlib编码器/解码器的javadoc并没有按照要求提及它,尽管它们的超类都有。
答案 0 :(得分:2)
这取决于传输协议以及压缩如何应用于消息/帧,
如果仅对内容部分应用压缩,如下所示(如http),则不需要LengthFieldBasedFrameDecoder,因为您的解码器/编码器必须在内部使用带有ZlibDecoder / ZlibEncoder的DecoderEmbedder / EncoderEmbedder。
+-----+---------------+
| | |
| HDR | Content |
| | |
+-----+---------------+
如果压缩应用于整个帧并且传输协议是TCP,则压缩帧应该具有标头参数以标识消息长度以完全读取它。因此,您需要在管道中使用LengthFieldBasedFrameDecoder和LengthFieldPrepender
+---------------------+ +------+-------------+
| | | | |
| Frame | <=> |Length| Zipped Frame|
| | | | |
+---------------------+ +------+-------------+
答案 1 :(得分:1)
不,你不应该需要它。事实上,ZlibDecoder / ZlibEncoder通常放在这些处理程序的“前面”。