遠端程序呼叫
此條目需要擴充。 (2018年9月15日) |
此條目沒有列出任何參考或來源。 (2018年9月15日) |
分散式計算中,遠端程序呼叫(英語:Remote Procedure Call,RPC)是一個電腦通訊協定。該協定允許執行於一台電腦的程式呼叫另一個位址空間(通常為一個開放網路的一台電腦)的子程式,而程式設計師就像呼叫本地程式一樣,無需額外地為這個互動作用編程(無需關注細節)。RPC是一種伺服器-客戶端(Client/Server)模式,經典實現是一個通過傳送請求-接受回應進行資訊互動的系統。
如果涉及的軟體採用物件導向程式設計,那麼遠端程序呼叫亦可稱作遠端呼叫或遠端方法呼叫,例:Java RMI。
RPC是一種行程間通訊的模式,程式分布在不同的位址空間里。如果在同一主機里,RPC可以通過不同的虛擬位址空間(即便使用相同的實體位址)進行通訊,而在不同的主機間,則通過不同的實體位址進行互動。許多技術(通常是不相容)都是基於這種概念而實現的。
歷史起源
編輯有關RPC的想法至少可以追溯到1976年以「信使報」(Courier)的名義使用。RPC首次在UNIX平台上普及的執行工具程式是SUN公司的RPC(現在叫ONC RPC)。它被用作SUN的NFC的主要部件。ONC RPC今天仍在伺服器上被廣泛使用。 另一個早期UNIX平台的工具是「阿波羅」電腦網路計算系統(NCS),它很快就用做OSF的分布計算環境(DCE)中的DCE/RPC的基礎,並補充了DCOM。
資訊傳遞
編輯遠端程序呼叫是一個分散式計算的客戶端-伺服器(Client/Server)的例子,它簡單而又廣受歡迎。遠端程序呼叫總是由客戶端對伺服器發出一個執行若干過程請求,並用客戶端提供的參數。執行結果將返回給客戶端。由於存在各式各樣的變體和細節差異,對應地衍生了各式遠端程序呼叫協定,而且它們並不互相容。
流程
編輯- 客戶端呼叫客戶端stub(client stub)。這個呼叫是在本地,並將呼叫參數push到棧(stack)中。
- 客戶端stub(client stub)將這些參數包裝,並通過系統呼叫傳送到伺服器端機器。打包的過程叫 marshalling。(常見方式:XML、JSON、二進制編碼)
- 客戶端本地作業系統傳送資訊至伺服器。(可通過自訂TCP協定或HTTP傳輸)
- 伺服器系統將資訊傳送至伺服器端stub(server stub)。
- 伺服器端stub(server stub)解析資訊。該過程叫 unmarshalling。
- 伺服器端stub(server stub)呼叫程式,並通過類似的方式返回給客戶端。
標準化的溝通機制
編輯為了允許不同的客戶端均能訪問伺服器,許多標準化的 RPC 系統應運而生了。其中大部分採用介面描述語言(Interface Description Language,IDL),方便跨平台的遠端程序呼叫。
參見
編輯- 本地過程呼叫
- 行程間通訊
- 開放網路運算遠端程序呼叫(ONC RPC)
- DCE/RPC
- JSON-RPC