Netty 常用解码器学习笔记
Netty 常用解码器包括:固定长度解码器、特殊分隔符解码器、长度域解码器。
固定长度解码器(FixedLengthFrameDecoder)
通过构造函数设置固定长度的大小 frameLength,无论接收方一次获取多大的数据,都会严格按照 frameLength 进行解码。
如果累积读取到长度大小为 frameLength 的消息,那么解码器认为已经获取到一个完整的消息。如果消息长度小于 frameLength,解码器会一直等后续数据包的达到,直至获得完整的消息。
特殊分隔解码器(DelimiterBasedFrameDecoder)
我们先看一下几个属性:
delimiters:指定特殊分隔符,通过写入 ByteBuf 作为参数传入。类型为 ByteBuf 数组,所以我们可以同时指定多个分隔符,但是最终会选择长度最短的分隔符进行消息的拆分。
maxLength:是报文最大长度的限制。如果超过还没有检测到指定分隔符,将会抛出 TooLongFrameException。是对程序在极端情况下的保护措施。
failFast:可以控制抛出 TooLongFrameException 的时机。如果为 true,那么在超出 maxLength 会立即抛出;如果为 false,那么会等到解码出一个完整的消息后才会抛出。
stripDelimiter:是判断解码器后得到的消息是否去除分隔符。
长度域解码器(LengthFieldBasedFrameDecoder)
是解决 TCP 拆/粘包问题最常用的解码器。它覆盖了大部分基于长度拆包场景。例如中间件 RocketMQ 就是使用 LengthFieldBasedFrameDecoder 进行解码的。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/a7fca83b5242561ea6494d8e5】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论