Netty处理TCP半包和粘包问题

Netty在RPC中充当着重要的核心角色,封装了对JDK NIO的复杂操作。
TCP连接中存在半包和粘包问题,其历史原因不在追究,Netty在对问题处理上提供了现有的模板方法,用户需要自己定义编码和解码规则就可以处理。
LengthFieldBasedFrameDecoder这个类是用于分隔消息模板类;
假如我们规定一个TCP消息的结构如下:
1、两个字节表示消息长度;
2、剩余字节表示body内容;
在这里插入图片描述
当服务端接收到流信息时,LengthFieldBasedFrameDecoder.decode方法开始使用规定好的规格来解析整个数据流
1、先读取前两位数据,获取到整个body报文件长度;
2、然后读取对应body长度的字节数来获取到body内容;
针对LengthFieldBasedFrameDecoder构造方法几个参数说明:
maxFrameLength:最大帧长度。也就是可以接收的数据的最大长度。如果超过,此次数据会被丢弃。
lengthFieldOffset:长度域偏移。就是说数据开始的几个字节可能不是表示数据长度,需要后移几个字节才是长度域。
lengthFieldLength:长度域字节数。用几个字节来表示数据长度。
lengthAdjustment:数据长度修正。因为长度域指定的长度可以使header+body的整个长度,也可以只是body的长度。如果表示header+body的整个长度,那么我们需要修正数据长度。
initialBytesToStrip:跳过的字节数。如果你需要接收header+body的所有数据,此值就是0,如果你只想接收body数据,那么需要跳过header所占用的字节数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值