1. 程式人生 > >【RPC入門】RPC概念、原理及開發

【RPC入門】RPC概念、原理及開發

RPC基礎概念

RPC(Remote Procedure Call)—遠端過程呼叫,它是一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。
在一般的應用程式中,被呼叫的過程在相同的地址空間中執行,並把結果返回給發出呼叫的過程。在分散式環境中,客戶機和伺服器在不同的機器上執行,客戶端呼叫在伺服器端執行的過程,並把結果傳送回客戶機。這稱為遠端過程呼叫 (RPC),是 RPC 程式設計的基礎。

RPC 工作原理

RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊到達為止。當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫程序接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。

任何 RPC 客戶機-伺服器程式的重要實體都包括 IDL 檔案(介面定義檔案)、客戶機 stub、伺服器 stub 以及由客戶機和伺服器程式共用的標頭檔案。客戶機和伺服器 stub 使用 RPC 執行時庫通訊。RPC 執行時庫提供一套標準的執行時例程來支援 RPC 應用程式。

使用 RPC 程式設計是在分散式環境中執行的客戶機和伺服器應用程式之間進行可靠通訊的最強大、最高效的方法之一。

RPC 客戶機-伺服器互動方式

圖 1 說明客戶機和伺服器通過網路完成 RPC 呼叫的方式。
圖 1. 基本的 RPC 客戶機-伺服器互動

當客戶機應用程式發出遠端過程呼叫時,在兩端的 RPC 執行時庫的幫助下,客戶機 stub 把與這個呼叫相關的資訊通過網路傳遞給伺服器 stub,見 圖 1。伺服器 stub 把所需的資訊提供給伺服器應用程式。伺服器應用程式執行遠端過程呼叫,然後使用 RPC 執行時庫通過伺服器 stub 把結果傳遞給客戶機 stub。最後,客戶機 stub 把結果返回給客戶機應用程式。stub 作為應用程式和 RPC 執行時之間的介面,以兩者可以理解的格式交換資訊。

在開發客戶機-伺服器應用程式時,客戶機和伺服器首先應該就要交換的過程的宣告和定義達成一致。這就是介面起的作用,介面維護客戶機和伺服器都認可的所有過程宣告和資料型別。

我們把所有共用的宣告和資料型別放在介面定義語言 (IDL) 檔案中,客戶機和伺服器將共享這個檔案。我們在 IDL 檔案中使用 UUID,以使之在網路上所有其他介面中保持惟一。UUID 是一個惟一的隨機數,是由 uuidgen 實用程式使用網路地址資訊和系統時間生成的。

開發 RPC 客戶機-伺服器應用程式

圖 2 說明在開發簡單的客戶機-伺服器分散式應用程式時涉及的步驟。
圖 2. 開發 RPC 客戶機-伺服器應用程式

開發RPC應用程式涉及的步驟

  • 用 IDL 編譯器編譯 IDL 檔案,生成客戶機和伺服器 stub 物件檔案以及標頭檔案。
  • 這個標頭檔案包含共用的定義和過程。
  • stub 檔案在遠端過程呼叫期間作為應用程式和 RPC 執行時庫之間的介面。
  • 標頭檔案包含在客戶機和伺服器原始碼檔案中。
  • 用 C 編譯器分別編譯客戶機和伺服器檔案,生成物件檔案。
  • 客戶機物件檔案和客戶機 stub 檔案與 RPC 執行時庫連結,生成客戶機可執行程式。
  • 以相似的方式生成伺服器可執行程式,見圖 2。

reference

https://www.ibm.com/developerworks/cn/aix/library/au-rpc_programming/