1:常见粘包问题
由于TCP报文传输中,业务数据包的大小不固定,不能保证每次tcp报文接收到的是一个完整的报文。
常见的粘包处理方法有:
- 固定包长度处理;
- 分割符处理,会存在报文体中间存在分隔符,需要对报文体转义;
- 不固定报文长度,但是报文体有字段指定报文体长度;
2:项目粘包问题处理
项目中遇到的就是上面第三种问题,日志打印会有异常报文解析。
报文格式如下:
处理的方法是借助netty的管道处理类,让netty在接收到报文时做一个报文分割的预处理。
红色框出来为新增的,修改后测试,报文正常收发。
//发送的数据包最大长度为1024*64
//length域的偏移,正常情况下读 取数据从偏移为0处开始读取,如果有需要可以从其他偏移量处开始读取
//length域占用的字节数
//在length域和content域中间是 否需要填充其他字节数
//解码后跳过的字节数 ( 解码后把 length占用的字节跳过,直接传数据包)
.addLast(new LengthFieldBasedFrameDecoder(30 + 1024, 24, 2, 1, 2))