怎么解决拆包和粘包?
分包机制一般有两个通用的解决方法:
- 特殊字符控制;
-
在包头首都添加数据包的长度。
如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。
tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆分。
分包机制一般有两个通用的解决方法:
在包头首都添加数据包的长度。
如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。
tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆分。
评论(2)
发送方关闭Nagle算法,使用TCP_NODELAY选项关闭Nagle功能 2. 发送定长的数据包。 3. 应用层自定义规则 4. 数据包头部加上数据包的长度。
一般有三种方式分包的方式:
固定长度的消息;
特殊字符作为边界;
自定义消息结构。