netty使用DelimiterBasedFrameDecoder處理tcp粘包

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

 

以上方法均爲親測可用,根據不同需求使用不同方法。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章