粘包分包现象及解决方案、编解码器源码分析

粘包分包现象及解决方案、编解码器源码分析
粘包分包现象及解决方案、编解码器源码分析
粘包分包原因(了解)
TCP当中,只有流的概念,没有包的概念(根本原因)
粘包:
服务端原因
收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据
客户端原因
TCP为提高传输效率,要收集到足够多的数据后才发送一包数据

分包:
应用程序写入的字节大小大于套接字发送缓冲区的大小
进行mss(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>MSS
以太网帧的payload(净荷)大于MTU(1500字节)进行ip分片

粘包分包问题解决思路
服务端和客户端约定好稳定的数据包结构
客户端根据约定的数据包结构发送数据
服务端根据约定的数据包结构来读取数据

自定义FrameDecoder解决粘包分包问题
继承FrameDecoder类

Netty自带粘包分包解决方案
FixedLengthFrameDecoder
LineBasedFrameDecoder
DelimiterBasedFrameDecoder