遠程過程調用
此條目需要擴充。 (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