在某種意義上,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):
- Client向ClientStub傳送請求(Call)。
- ClientStub對請求引數進行封包(也叫Marshalling),發出系統呼叫,OS向S端傳送訊息。
- S端接收到訊息後,把封包訊息傳遞給ServerStub。ServerStub解包(UnMarshalling)。
- 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)