產生動因:
1、開發基於SOCKET的網絡軟件非常複雜(如:FTP、TELNET),2、位於不同機器上的軟件互操作困難(如:連接管理、異構)。從而導致RPC(Remote Procedure Calling )的產生。
工作原理:
以對某銀行帳戶的一個存款過程爲例:
如上圖所示,共分爲如下幾步:
1)客戶按本地調用的方式直接調用本地的客戶指代,客戶指代具有與服務器相同的過程接口
2)客戶指代 將客戶的調用請求進行加工、打包向底層通信機制(如套接字)發出請求消息,客戶指代不進行任何邏輯處理,只是一箇中介
3)客戶端通過底層的通信機制將消息傳送給服務器端的底層通信機制
4)服務器 需要部分地解析消息,找出客戶希望調用的服務器程序
5)服務器指代對消息進行解析,從中獲得調用者的參數,然後調用服務器程序
6)服務器程序執行相應的過程
7)服務器程序將結果返回給服務器指代
8)服務器指代將結果打包,向底層通信機制發出應答消息
9)服務器端通信機制將消息傳送給客戶端通信機制
10)客戶端節點上也可能有多個調出點,通信機制需要部分地解析返回的消息,找出消息應該返回給哪個客戶程序,並將消息發送給對應的客戶指代
11)客戶指代從消息中解析結果,返回給客戶程序
其中,客戶端指代(Stub)的主要工作包括:
1)建立客戶與服務器之間的連接
2)將客戶的高層調用語句打包爲一條底層的請求消息
這一過程在RPC中被稱爲編排(marshal)
3)等待服務器返回應答消息
4)將來自服務器底層的應答消息解析爲可以返回的數據
這一過程在RPC中被稱爲還原(unmarshal)
5)將返回值傳送給客戶程序
需要特別處理:編碼、字節序等問題
服務器端的指代除了需要進行編排、還原外,還需要區分客戶所請求的過程名,然後將客戶的請求分派(dispatch)給正確的過程。
“指代” 目前主要被用於專門代表客戶端的代理程序,而服務器端則由新的機制予以支持。
在CORBA中專門分離出了對象適配器(OA:Object Adaptor),在EJB中發展出了構件容器,用於在運行過程中專門管理構件的各種狀態。此時的服務器端不僅負責請求分派,還負責向底層機制的註冊(以方便請求的定位),以及過程的激活(以加強系統的靈活性)等等功能。
基於RPC的開發過程:
1、定義並編譯接口
2、編寫實現具體服務功能的代碼
3、編譯、連接,產生可執行的服務器程序
4、編寫客戶端代碼
5、編譯、連接,產生客戶程序
6、運行服務器端程序
7、運行客戶端程序
主要實例:
SUN公司等提出的ONC(Open Network Computing)RPC,主要由SUN予以實現。
OSF(Open Software Foundation)RPC影響最大,主要由DCE(Distributed Computing Environment)實現,DCE是OSF提出的分佈計算體系結構。