是否有必要使用分隔符,例如LengthFieldBasedFrameDecoder
Netty 的 ZlibDecoders?我遇到了一个问题,即解码器有时会因“未知压缩方法”而出错,当我修改管道以分隔数据时,这种情况就消失了。Zlib 编码器/解码器的 javadocs 没有按要求提及这一点,尽管它们的超类确实如此。
问问题
751 次
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 回答