粘包和分包是利用Socket在TCP协议下内部的优化机制。都是为了优化TCP的性能。
在前面的文章中,我们都还没有涉及粘包和分包的问题。
1.粘包
发送消息频繁、包体很小,则把消息整合成一个包,一起发送。
2.分包
在收到消息的时候,不一定只是一条消息,就需要分包。
数据量很大的时候,分成几个消息发送。(消息发送失败,重新发送的时候,需要重发的消息也小)
3.粘包和分包问题场景重现:
重现很简单,粘包的重现就在发送消息的时候用一个for循环发很小的消息,优化机制就会自动把它们粘在一起。
分包:发送消息的时候发一个很大的消息,优化机制会自动分包。
4.解决:
在消息前面加一个数据长度:
数据长度占的字节需要固定。用int32,占4个字节。