文章目錄
文章說明
一:Dubbo協議
1:Dubbo協議簡介
2:Dubbo協議優點
?3:Dubbo協議幀的組成
(一):幻數
(二):2Way
(三):event
(四):Serilization ID
(五):status
(六):RequestID
(七):數據長度
文章說明
本文內容整理自《孫哥說Dubbo系列視頻課程》,孫帥老師課程細致、全面、深入、性價比極高。B站搜孫帥suns可以找到對應的試聽視頻,或者直接添加老師微信號suns45與他直接聯系
一:Dubbo協議
Rpc過程當中三個核心的要素就是:協議 序列化? 通信方式
1:Dubbo協議簡介
Dubbo協議是Dubbo定義的私有化協議。也是Dubbo默認的協議,我們在不進行任何設置的情況下Dubbo使用的協議就是Dubbo協議,默認的序列化范式就是Hessian2,當然在3.2之后的Dubbo版本切換為了FastJson2,Dubbo的默認的通信方式是Netty4。
不同的協議,支持的通信方式是不一樣的。我們的dubbo協議走的是TCP層,他的通信方式就是Netty或者Mina,當我們后續將Rest協議的時候,他的序列化方式使用的就是JSON或者XML的方式了,它的通訊方式就是Jetty或者是Tomat這種服務器的通信方式。
不同的協議+序列化方式組合+通信方式對應的通信效率是天差地別的。他們對應的執行效率,也就是:響應時間、TPS和QPS也是天查地別的。
2:Dubbo協議優點
Dubbo協議最大的特點是什么呢?他是一個長鏈接異步通信的方式,他和我們Netty里邊Futrure和Promise的情況是可以畫等號的。這種情況適用于,小數據量大并發的數據調用。他不適合大數據量的服務比如:傳輸文件和視頻。日常常規的調用,數據量比較小,兵法比較高,使用Dubbo協議是比較合適的。
?3:Dubbo協議幀的組成
?所謂協議幀的組成,就是協議描述了通信雙方,在通信內容傳輸過程中達成的傳輸單位(幀)的約定。在這個幀的信息里邊,那些是頭信息,那些是體信息?實際上整個幀的結構。
不同的協議是不一樣的,但是基本的內容是一致的,都包括頭信息和體信息。Dubbo協議的幀信息里邊,幻數,序列化方式,操作的方向性,狀態信息和數據大小信息,這些內容都有,以及這些操作內容占多大的空間。
(一):幻數
幻數:幻數這個內容分為幻術高位和幻數地位,總共占據16個bit。0xdabb這是一個16進制的數字,他的作用標識了這是Dubbo協議的標準幀,有了這個標識才能被認定為這是客戶端給服務端發送的一個標準的幀,他的作用就類似于Java中class文件的cafababe。
req和res占用了1bit的空間,表達的是這是請求的數據還是相應的數據,如果是請求的數據則是1,如果是響應的數據則是0,這個就代表了,咱們前邊提到的操作的方向性。
(二):2Way
這個標志位只能在req是1的時候,它的含義代表了我們期望服務器給我們的返回值是有值還是沒值的情況。1是有值。
(三):event
事件,這個可以告訴付服務端,我們這是一個普通的請求信息,還是心跳事件,如果是心跳事件的話,這里會是1
(四):Serilization ID
序列化協議,如果是FastJson2的話,這里應該是6.
(五):status
20 - OK
30 - CLIENT_TIMEOUT
31 - SERVER_TIMEOUT
40 - BAD_REQUEST
50 - BAD_RESPONSE
60 - SERVICE_NOT_FOUND
70 - SERVICE_ERROR
80 - SERVER_ERROR
90 - CLIENT_ERROR
100 - SERVER_THREADPOOL_EXHAUSTED_ERROR
(六):RequestID
給我們請求一個編號,占用64bit,是一個Long值。
(七):數據長度
Data Length (32)數據長度
這個數據長度的大小是必須要給的,只有給了這個數據長度的大小,我們才可以順利的解決半包和粘包問題。
?