背景:
最近在项目线上出现一些问题,部分拆包粘包数据并没有拆完,就转发给下一个流程,所以导致数据解析失败。在调试的过程中,我发现了一个Netty
神奇的机制——重发机制。
介绍:
Netty重发:Netty中的byteBuf中的数据如果没有被取走,那么会不停的向下层推送byteBuf中的数据。
跟踪源码:
- 1.首先发送一条粘包报文:40 3A 00 29 13 80 94 30 02 7F 01 5A 17 46 02 10 20 10 23 19 00 6C F1 14 38 39 38 36 30 30 44 39 32 37 31 37 35 37 36 38 34 33
33 33 DC 0D 0A 40 3A 00 29 13 80 94 30 02 7F 01 5A 17
(不懂粘包和拆包的小伙伴可戳这里) - 2.首次进入
- 3.拿到半包数据,向下跟踪,这里检测到解码状态,设置为继续等待,所以不移除
<