写点什么

Netty 常用解码器学习笔记

用户头像
风翱
关注
发布于: 2021 年 05 月 17 日

Netty 常用解码器包括:固定长度解码器、特殊分隔符解码器、长度域解码器。


固定长度解码器(FixedLengthFrameDecoder)

通过构造函数设置固定长度的大小 frameLength,无论接收方一次获取多大的数据,都会严格按照 frameLength 进行解码。

如果累积读取到长度大小为 frameLength 的消息,那么解码器认为已经获取到一个完整的消息。如果消息长度小于 frameLength,解码器会一直等后续数据包的达到,直至获得完整的消息。


特殊分隔解码器(DelimiterBasedFrameDecoder)

我们先看一下几个属性:

delimiters:指定特殊分隔符,通过写入 ByteBuf 作为参数传入。类型为 ByteBuf 数组,所以我们可以同时指定多个分隔符,但是最终会选择长度最短的分隔符进行消息的拆分。

maxLength:是报文最大长度的限制。如果超过还没有检测到指定分隔符,将会抛出 TooLongFrameException。是对程序在极端情况下的保护措施。

failFast:可以控制抛出 TooLongFrameException 的时机。如果为 true,那么在超出 maxLength 会立即抛出;如果为 false,那么会等到解码出一个完整的消息后才会抛出。

stripDelimiter:是判断解码器后得到的消息是否去除分隔符。


长度域解码器(LengthFieldBasedFrameDecoder)

是解决 TCP 拆/粘包问题最常用的解码器。它覆盖了大部分基于长度拆包场景。例如中间件 RocketMQ 就是使用 LengthFieldBasedFrameDecoder 进行解码的。


发布于: 2021 年 05 月 17 日阅读数: 15
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Netty常用解码器学习笔记