分布式計算中,遠端程序呼叫(英語:Remote Procedure CallRPC)是一個計算機通信協議。該協議允許運行於一台計算機的程序調用另一個地址空間(通常為一個開放網絡的一台計算機)的子程序,而程序員就像調用本地程序一樣,無需額外地為這個交互作用編程(無需關注細節)。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)的例子,它簡單而又廣受歡迎。遠程過程調用總是由客戶端服務器發出一個執行若干過程請求,並用客戶端提供的參數。執行結果將返回給客戶端。由於存在各式各樣的變體和細節差異,對應地衍生了各式遠程過程調用協議,而且它們並不互相兼容。

流程

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

標準化的溝通機制

為了允許不同的客戶端均能訪問服務器,許多標準化的 RPC 系統應運而生了。其中大部分採用接口描述語言(Interface Description Language,IDL),方便跨平台的遠程過程調用。

參見

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.