轉RMI、RPC、SOAP通訊技術介紹及比對

醉意人間發表於2015-02-23

 http://www.open-open.com/home/space.php?uid=37924&do=blog&id=8974

 

1、RMI

    使用java的程式設計師,對於RMI(RemoteMethod Invoke,遠端方法呼叫)一定不陌生,在java中,為了在分散式應用開發時,能夠方便呼叫遠端物件,java提供了RMI的API。在 RMI 中,遠端物件按照好象它是本地行事,客戶機應用程式會直接呼叫遠端物件存根上的方法,因此,呼叫起來就如本地物件一樣方便。RMI中封裝了物件和請求的網 絡傳送,使得異地的物件服務直接可用。

但RMI的使用必須是在能夠識別java程式碼的環境下使用,即必須有JVM的支援。因此,他只適合在java程式間的物件通訊。如果不在 Java 環境下工作,或者需要與非 Java 環境通訊,那麼SOAP、RPC、CORAR等都是可以的。.

2、RPC & XML-RPC

       RPC(Remote Method Invocation,遠端過程呼叫) 與RMI的區別很明顯,相比於RMI直接獲取遠端方法的簽名,進行呼叫的方式,RPC使用的是C/S方式,傳送請求到伺服器,等待伺服器返回結果。

為了包裝RPC的請求資訊,推出了XML-RPC,客戶端傳送一條特定訊息,該訊息中必須包括名稱、執行服務的程式以及輸入引數。

XML-RPC只能使用有限的資料型別種類和一些簡單的資料結構。SOAP最主要的工作是使用標準的XML描述了RPC的請求資訊(URI/類/方法/引數/返回值)。SOAP的方式,SOAP 是對如CORBA 和 RMI-IIOP 這樣的重型 範例吸引人的替代。

3、SOAP

       SOAP的訊息被稱為一個SOAP Envelope,包括SOAP Header和SOAP Body。其中,SOAP Header可以方便的插入各種其它訊息來擴充Web Service的功能,比如Security(採用證照訪問Web Service),SOAP Body則是具體的訊息正文,也就是Marshall後的資訊。

       某些程式設計師每天掙扎於 Perl 和 C 元件、C 和 Java 元件之間的通訊。這些開發人員可以從轉向基於 SOAP 或基於 XML-RPC 的通訊模型中獲益匪淺。另一方面,從不轉向 Java 以外語言的 Java 開發人員可以轉向 RMI 而不是使用 SOAP,他們會看到極大的效能改善。

4、WSDL

WSDL(Web Services Description Language)是描述web服務的,是描述怎樣訪問web服務的。WSDL是用來描述SOAP的,換句話說,WSDL 檔案告訴你呼叫 SOAP 所需要知道的一切。WSDL也是一段xml。現在各個語言對wsdl的支援都很成熟,可以根據同一份wsdl檔案生成自己語言的客戶端。

5、其他

       其他還有REST、Axis等

 

下面是RMI、RPC和SOAP的比較

 

 

RMI

RPC

SOAP

通訊方式

遠端物件按照好象它是本地行事.客戶機應用程式直接呼叫遠 程物件存根上的方法

客戶機不直接呼叫方法,而是向伺服器傳送請求訊息。

在XML-RPC上,使用規定的XML格式的資料格式來通訊。比XML-RPC更具適用性,能夠支援更多的型別及資料結構。

優點

遠端物件按照好象它是本地行事,編譯期可以檢查錯誤

它允許客戶機與伺服器之間有更大的獨立性。

伺服器無需讓客戶機知道,就可以完全關機和被替換

非常適合非同步通訊和針對鬆耦合的客戶機和伺服器

缺點

只能基於java語言。異常資訊容易丟失。客戶機與伺服器緊耦合。

喪失了許多可以確保方法和引數是正確的編譯時便利。

必須做大量的執行時檢查,而且開發人員喪失了許多可以確保方法和引數是正確的編譯時便利。

 

 


相關文章