說說HTTP和RPC

最近被問到一個問題:“RPC和HTTP有什麼區別?”
我說:“前者比後者效率高,但實現比較麻煩。總得來說後者比前者更“重”,導致效率低。”
回答的十分籠統,我覺得甚至沒有解釋清楚這個東西。
所以決定認真的再看看這兩位“熟悉的朋友”。

HTTP

什麼是HTTP?

HTTP是HyperText Transfer Protocol(超文本傳輸協議)的縮寫。是一個應用層協議,規定了客戶端(用戶)和服務端(網站)之間請求和應答的標準,相互間通常使用TCP協議來進行連接,使用URI(Uniform Resource Identifiers,統一資源標識符)來標識資源。

URN和URL都是URI的表示形式。

  • URN(Uniform Resource Name,統一資源名稱),爲資源提供持久的、位置無關的標識方式,格式:urn:<NID>:<NSS>
  • URL(Uniform Resource Locator,統一資源定位系統),用於標識互聯網資源地址,完整格式:[協議類型]://[訪問資源需要的憑證信息]@[服務器地址]:[端口號]/[資源層級UNIX文件路徑][文件名]?[查詢]#[片段ID]

RPC

什麼是RPC?

RPC是Remote Procedure Call(遠程過程調用)的縮寫。是一種服務器-客戶端(Client/Server)模式,它允許一臺計算機中的程序調用另一個地址空間(通常爲一個開放網絡的一臺計算機)的子程序。
RPC通常包含傳輸協議和編碼協議。

  • 傳輸協議:HTTP,TCP等
  • 編碼協議:xml、json等

RPC是如何工作的?

在這裏插入圖片描述

  1. 客戶端調用客戶端stub(client stub)。這個調用是在本地,並將調用參數push到棧(stack)中。
  2. 客戶端stub(client stub)將這些參數包裝,並通過系統調用發送到服務端機器。打包的過程叫 marshalling。(常見方式:XML、JSON、二進制編碼)
  3. 客戶端本地操作系統發送信息至服務器。(可通過自定義TCP協議或HTTP傳輸)
  4. 服務器系統將信息傳送至服務端stub(server stub)。
  5. 服務端stub(server stub)解析信息。該過程叫 unmarshalling。
  6. 服務端stub(server stub)調用程序,並通過類似的方式返回給客戶端。

爲什麼需要RPC?

  1. RPC可以讓不同的程序間進行交互,調用方式和本地方法調用一樣,使用方便。
  2. 其傳輸協議可以使用傳輸層協議,比起網絡層協議,效率更高。

結語

回到朋友最初的提問,這兩者什麼區別?一個是傳輸協議,一個是服務器-客戶端模式,RPC可以選擇在底層使用HTTP。
感覺把概念捋清了,很多東西就不言自明瞭。很多習以爲常的概念,還是要多瞭解,最後內化成自己的東西,不然解釋起來也是模棱兩可XD。

參考

  1. Hypertext Transfer Protocol
  2. 十分鐘搞懂HTTP和HTTPS協議?
  3. Remote procedure call
  4. 既然有 HTTP 請求,爲什麼還要用 RPC 調用? - 易哥的回答 - 知乎
  5. 淺談 RPC 和 REST: SOAP, gRPC, REST
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章