1.tcp產生粘包問題的原因有
- 應用程序write寫入的字節大小大於套接字發送緩衝區的大小。
- 進行MSS(TCP的數據部分)大小的TCP分段。
- 以太網幀的payload大於MTU進行IP分片
2.解決方案
- 消息定長,例如每個報文的大小固定,例如固定爲100字節,如果長度不夠,可以用空白填充。
- 在包尾增加回車換行符進行分割,例如FTP協議。
- 將消息分爲消息頭和消息體,消息頭中包含表示消息的總長度(或者消息體長度)的字段,通常設計思路爲消息頭的第一個字段使用int32來表示消息的總長度
3.netty中使用的3種解決方案
- LineBasedFrameDecoder 時間解碼器
- DelimiterBasedFrameDecoder 分隔符解碼器
- FixedLengthFrameDecoder 定長解碼器
(1)DelimiterBasedFrameDecoder 分隔符解碼器解決方案
https://blog.csdn.net/q56231293811/article/details/78741780
(2)LineBasedFrameDecoder 時間解碼器解決方案
https://blog.csdn.net/qq_33227649/article/details/78319613
(3)FixedLengthFrameDecoder 定長解碼器解決方案
https://blog.csdn.net/wangmx1993328/article/details/83956974
以上方法均爲親測可用,根據不同需求使用不同方法。