【dubbo系列】dubbo協議存在的意義

前言
​ 什麼是協議?協議可以認爲是一種語言,是一種交互的標準。比如A和B互相發手機短信。A和B必須互相知道對方手機號(IP地址),知道手機號後,全部使用漢語(協議)即可互相通信。
​ http即超文本傳輸協議,它是運行在TCP之上的應用層協議。http誕生之初主要是應用於WEB端內容獲取。http協議簡單快速,支持很多請求方法,如GET,POST等等;使用靈活,可以傳輸任意數據,只需要Content-Type標記即可;安全性,使用https交互,可防止數據竊取;

​ 既然http應用這麼厲害,爲什麼還會dubbo協議?那麼dubbo協議存在的意義又是什麼?

報文格式不同

​ 創建socketServer,因爲http是tcp之上的協議,dubbo是tcp協議進行傳輸,所以通過socketServer即可查看兩者發送數據的區別。

 public static final Integer port = 8080;
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            Socket accept = serverSocket.accept();
            InputStreamReader reader = new InputStreamReader(accept.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(reader);
            String str = null;
            while ((str = bufferedReader.readLine())!=null){
                System.out.println("----------");
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

啓動之後,通過瀏覽器發送一個簡單的http請求,比如http://localhost:8080/index.html?userName=123這種請求是其爲常見的。
在這裏插入圖片描述

我們只是需要請求index.html,並且攜帶userName=123,即可發現,瀏覽器發送了很多數據,瀏覽器類型,cookie等等。

通過dubbo客戶端發送一個簡單的dubbo請求,比如訪問com.nacos.dubbo.service.IUserService接口中的getUserInfo方法並且入參爲哈哈

在這裏插入圖片描述

請求數據很明顯,http協議數據量要大很多。

傳輸方式不同

​ http協議是應用層協議,是一種無狀態協議,在交互之前需要進行tcp三次握手,握手成功之後進行數據傳輸。不知道大家有沒有想過,http每次傳輸都需要三次握手麼?那麼本來一個頁面那麼多http請求都需要三次握手麼?豈不是很浪費資源?

​ 在早期的HTTP/1.0中,每次http請求都要創建一個連接,而創建連接的過程需要消耗資源和時間,爲了減少資源消耗,縮短響應時間,就需要重用連接。在後來的HTTP/1.1中,引入了重用連接的機制,就是在http請求頭中加入Connection: keep-alive來告訴對方這個請求響應完成後不要關閉,下一次咱們還用這個請求繼續交流。協議規定HTTP/1.1如果想要保持長連接,需要在請求頭中加上Connection: keep-alive,而HTTP/1.1默認是支持長連接的,有沒有這個請求頭都行。

​ dubbo默認使用socket長連接,即首次訪問建立連接以後,後續網絡請求使用相同的網絡通道。

總結

​ 通過如上對比,到現在dubbo存在的意義就很明顯了,dubbo協議追求的是數據量小,小則快,協議的設計也符合dubbo框框架的理念,適用與內部服務之間的數據交互。安全性就沒有https做的那麼好,但是也不需要,畢竟dubbo協議設計的初衷就是內部使用的。

​ 既然dubbo協議適用於服務之間的互相調用。spring cloud的feign內部爲什麼使用http協議呢?個人認爲是架構的需要吧,例如服務A是java寫的,服務B是python寫的。這個時候dubbo協議就跑不通了。只能用http這種標準協議來交互。

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