【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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章