1. 程式人生 > 程式設計 >遠端過程呼叫RPC基本概念及實現原理

遠端過程呼叫RPC基本概念及實現原理

>>什麼是RPC

RPC 的全稱是 Remote Procedure Call 是一種程序間通訊方式。

它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即無論是呼叫本地介面/服務的還是遠端的介面/服務,本質上編寫的呼叫程式碼基本相同。

比如兩臺伺服器A,B,一個應用部署在A伺服器上,想要呼叫B伺服器上應用提供的函式或者方法,由於不在一個記憶體空間,不能直接呼叫,這時候需要通過就可以應用RPC框架的實現來解決。

>>RESTful、SOAP和RPC

  • (1)RESTful是一種架構設計風格,提供了設計原則和約束條件,而不是架構。而滿足這些約束條件和原則的應用程式或設計就是 RESTful架構或服務。
  • (2)SOAP,簡單物件訪問協議是一種資料交換協議規範,是一種輕量的、簡單的、基於XML的協議的規範。

SOAP協議和HTTP協議一樣,都是底層的通訊協議,只是請求包的格式不同而已,SOAP包是XML格式的。

SOAP的訊息是基於xml並封裝成了符合http協議,因此,它符合任何路由器、 防火牆或代理伺服器的要求。

soap可以使用任何語言來完成,只要傳送正確的soap請求即可,基於soap的服務可以在任何平臺無需修改即可正常使用。

  • (3)RPC就是從一臺機器(客戶端)上通過引數傳遞的方式呼叫另一臺機器(伺服器)上的一個函式或方法(可以統稱為服務)並得到返回的結果。

RPC 會隱藏底層的通訊細節(不需要直接處理Socket通訊或Http通訊)

RPC 是一個請求響應模型。客戶端發起請求,伺服器返回響應(類似於Http的工作方式)

RPC 在使用形式上像呼叫本地函式(或方法)一樣去呼叫遠端的函式(或方法)。

>>幾種RPC框架

幾種比較典型的RPC的實現和呼叫框架。

(1)RMI實現,利用.rmi包實現,基於Java遠端方法協議(Java Remote Method Protocol)和java的原生序列化。

(2)Hessian,是一個http://www.cppcns.com輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能。 基於HTTP協議,採用二進位制編解碼。

(3)THRIFT是一種可伸

縮的跨語言服務的軟體框架。thrift允許你定義一個描述檔案,描述資料型別和服務介面。依據該檔案,編譯器方便地生成RPC客戶端和伺服器通訊程式碼。

>>RPC的實現原理

(1)一個典型的RPC實現結構

遠端過程呼叫RPC基本概念及實現原理

  • RpcServer:負責匯出(export)遠端介面
  • RpcClient:負責匯入(import)遠端介面的代理實現
  • RpcProxy:遠端介面的代理實現
  • RpcInvoker:
    客戶方實現:負責編碼呼叫資訊和傳送呼叫請求到服務方並等待呼叫結果返回
    服務方實現:負責呼叫服務端介面的具體實現並返回呼叫結果
  • RpcProtocol:負責協議編/解碼
  • RpcConnector:負責維持客戶方和服務方的連線通道和傳送資料到服務方
  • RpcAcceptor:負責接收客戶方請求並返回請求結果
  • RpcProcessor:負責在服務方控制呼叫過程,DVmXA包括管理呼叫執行緒池、超時時間等
  • RpcChannel:資料傳輸通道

(2)實現過程

RPC 服務方通過 RpcServer 去匯出(export)遠端介面方法,而客戶方通過 RpcClient 去引入(import)遠端介面方法。

客戶方像呼叫本地方法一樣去呼叫遠端介面方法,RPC 框架提供介面的代理實現,實際的呼叫將委託給代理RpcProxy 。

代理封裝呼叫資訊並將呼叫轉交給RpcInvoker 去實際執行。

在客戶端的RpcInvoker 通過聯結器RpcConnector 去維持與服務端的通道RpcChannel,並使用RpcProtocol 執行協議編碼(encode)並將編碼後的請求訊息通過通道傳送給服務方。

RPC 服務端接收器 RpcAcceptor 接收客戶端的呼叫請求,同樣使用RpcProtocol 執行協議解碼(decode)。

解碼後的呼叫資訊傳遞給RpcProcessor 去控制處理呼叫過程,最後再委託呼叫給RpcInvoker 去實際執行並返回呼叫結果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。