不管是服務端仍是客戶端,當咱們讀取或者發送消息的時候,都須要考慮TCP底層的粘包/拆包機制。 TCP是一個「流」協議,所謂流,就是沒有界限的一串數據。TCP底層並不瞭解上層業務數據的具體含義,他會根據TCP緩衝區的實際狀況進行包的劃分,因此在業務上認爲,一個完整的包可能被TCP拆分紅多個包進行發送,也可能把多個小的包封裝成一個大的數據包發送,這就是所謂的粘包和拆包問題設計
問題產生的緣由有三個,以下:code
TCP以流的方式進行數據傳輸,因爲底層TCP沒法理解上層的業務數據,因此在底層是沒法保證數據包不被拆分和重組的,這個問題只能經過上層的應用協議棧設計來解決,上層的應用協議爲了對消息進行區分,業界主流的解決方案能夠概括以下:接口
Netty對上面的前四種應用作了統一的抽象,提供了Decoder來解決對應的問題,使用起來很是方便。有了這些Decoder,用戶不須要對本身讀取的報文進行人工解碼,也不須要考慮TCP的粘包和拆包。Decoder以下:it
參考文獻:《Netty權威指南》sed