网络传输中的帧和payload
消息 = 数据帧(数据包)* N
数据帧 = 头 + payload
来自百度百科:记载着信息的那部分数据。通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如这一批数据量的大小,校验位等,这样就相当于给已经分批原始数据加一些外套,这些外套起到标示作用,使得原始数据不易丢失。一批数据加上它的“外套”,就形成了传输通道中基本的传输单元,叫做数据帧或者数据包(有的地方数据帧和数据包不是同一概念比如网络传输)。这些数据帧中的记录信息的原始数据就是有效载荷数据,即payload data。
比如某协议规定每个应答消息由一个帧组成,约定每帧的前6个字节表示这一数据帧Frame长度,后面就是payload了,这样可以确定到底读取多少数据了而获得一个完整的消息。
上述协议的处理,在Netty 4中可以使用LengthFieldBasedFrameDecoder
来做解码,解决拆包粘包问题,在Netty 3里边用的是继承FrameDecoder
开发自定义帧解码器的方法。
Dubbo协议用的就是Length + payload
的方式,类似的还有Http协议的分块传输、Transfer-Encoding: chunked。