Netty 是如何解决粘包和拆包问题的?
Netty 是如何解决粘包和拆包问题的?
回答重点
Netty 提供了丰富的自带解码器为我们解决粘包和拆包的问题,也可以让我们自定义序列化解码器。
Netty 自带的解码器
- DelimiterBasedFrameDecoder:分隔符解码器,使用特定分隔符来分割消息。
- FixedLengthFrameDecoder:固定长度的解码器,可以按照指定长度对消息进行拆包,如果长度不够的话,可以使用空格进行补全,适用于每个消息长度固定的场景。
- LengthFieldBasedFrameDecoder:可以根据接收到的消息的长度实现消息的动态切分解码,适用于消息头包含表示消息长度的字段的场景。
- LineBasedFrameDecoder:发送端发送数据包的时候,数据包之间使用换行符进行分割,LineBasedFrameDecoder 就是直接遍历 ByteBuf 中的可读字节,根据换行符进行数据分割。
自定义编解码器
对于更杂场景,可以自定义解码逻辑,继承 ByteToMessageDecoder 实现一个自定义的解码器:
1 | public class CustomFrameDecoder extends ByteToMessageDecoder { |
扩展知识
Comments