RPC簡述

cacard發表於2014-02-28

在某種意義上,WebService、REST均是RPC的實現,那麼RPC的發展過程如何呢?本文參考了wikipedia,對RPC做一下簡要摘記。

RPC(RemoteProcedureCall),是程式間通訊(IPC,Inter-Process Communication)的一種技術,一般指不同機器上的程式間通訊。在採用C等古老語言程式設計的時候,RPC被稱作了對S端的“子程式”的呼叫,所以稱“過程呼叫”。在OOP出現後,RPC也可以稱為遠端方法呼叫(RemoteMethodInvocation),或者遠端呼叫(RemoteInvocation)。

RPC過程可以是同步的,也可以是非同步的。同步方式:C端向S端傳送請求,阻塞等待;S端執行一段子程式,傳送響應;C端繼續執行;非同步方式,比如XHTTP呼叫。

 

RPC的呼叫過程(Stub這個術語應該是借鑑了JavaRMI):

  1. Client向ClientStub傳送請求(Call)。
  2. ClientStub對請求引數進行封包(也叫Marshalling),發出系統呼叫,OS向S端傳送訊息。
  3. S端接收到訊息後,把封包訊息傳遞給ServerStub。ServerStub解包(UnMarshalling)。
  4. ServerStub呼叫S端的子程式。處理完畢後,以同樣的方式向C端傳送結果。

注:ServerStub又叫Skeleton。

 

什麼是Stub?

Stub是一段程式碼,用來轉換RPC過程中傳遞的引數。處理內容包括不同OS之間的大小端問題。另外,Client端一般叫Stub,Server端一般叫Skeleton。

生產方式:1)手動生成,比較麻煩;2)自動生成,使用IDL(InterfaceDescriptionLanguate),定義C/S的介面。

互動機制標準:一般採用IDL,生成IDL的工具 RPCGEN()。

 

RPC相關實現方式

  • JavaRMI
  • XML-RPC,XML+HTTP來進行機器之間的呼叫
  • JSON-RPC
  • SOAP,XML-RPC的升級版
  • Facebook Thrift
  • CORBA
  • AMF,AdobeFlex
  • Libevent,是一個用於構建RPC Server和Client的框架。
  • WCF,來自微軟
  • .net Remoting,逐步被WCF取代

 


 Refer

http://en.wikipedia.org/wiki/Remote_procedure_call
http://en.wikipedia.org/wiki/Stub_(distributed_computing)