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語言。異常信息容易丟失。客戶機與服務器緊耦合。 |
喪失了許多可以確保方法和參數是正確的編譯時便利。 |
必須做大量的運行時檢查,而且開發人員喪失了許多可以確保方法和參數是正確的編譯時便利。 |