写在前面
本文看下半包和粘包。
1:什么是半包和粘包,以及如何解决
因为网络传输数据都是一个数据包一个数据包传输的,就像这样:
在读取这些数据包时如果读到了数据包A的一部分就是半包
。如果是读到了数据包A和数据包B(或者是数据包B的一部分,总之就是把多个数据包混在一起了)就叫做粘包
。
半包和粘包底层传输是无法解决的,因为网络传输只是数据流,并不知道业务上的需求是如何的,所以想要解决半包和粘包就要业务上来解决,主要以下几种:
1:指定分割符,如换行符,netty中就提供了LineBasedFrameDecoder
2:指定固定大小,不足的部分做填充,netty中就提供了FixedLengthFrameDecoder
3:消息分为两部分,消息头和消息体,其中在消息头中指定长度(如使用int32定长来指定长度),消息体中为数据,netty就提供了LengthFieldBasedFrameDecoder
写在后面
参考文章列表
粘包和半包问题总结 。