<3>mysql:查詢語句
阿新 • • 發佈:2021-12-06
在RPC框架中,粘包和拆包問題是必須解決一個問題,因為RPC框架中,各個微服務相互之間都是維繫了一個TCP長連線,比如dubbo就是一個全雙工的長連線。由於微服務往對方傳送資訊的時候,所有的請求都是使用的同一個連線,這樣就會產生粘包和拆包的問題。本文首先會對粘包和拆包問題進行描述,然後介紹其常用的解決方案,最後會對Netty提供的幾種解決方案進行講解。這裡說明一下本文統一使用“解碼一器”表示該解碼器。
1. 粘包和拆包
產生粘包和拆包問題的主要原因是,作業系統在傳送TCP資料的時候,底層會有一個緩衝區,例如1024個位元組大小,如果一次請求傳送的資料量比較小,沒達到緩衝區大小,TCP則會將多個請求合併為同一個請求進行傳送,這就形成了粘包問題;如果一次請求傳送的資料量比較大,超過了緩衝區大小,TCP就會將其拆分為多次傳送,這就是拆包,也就是將一個大的包拆分為多個小包進行傳送。如下圖展示了粘包和拆包的一個示意圖: