RPC、RMI、SOAP的區(qū)別詳解
============================================================================
RPC與RMI的區(qū)別
============================================================================
RPC:(Remote Procedure Call)
被設(shè)計(jì)為在應(yīng)用程序間通信的平臺(tái)中立的方式,它不理會(huì)操作系統(tǒng)之間以及語(yǔ)言之間的差異。 支持多語(yǔ)言。
RMI:(Remote Method Invocation)
RPC 的Java版本,EJB的基礎(chǔ)技術(shù)
RMI 采用JRMP(Java Remote Method Protocol)通訊協(xié)議,是構(gòu)建在TCP/IP協(xié)議上的一種遠(yuǎn)程調(diào)用方法。
RMI 采用stubs和skeletons來(lái)進(jìn)行遠(yuǎn)程對(duì)象的通訊。
stub充當(dāng)遠(yuǎn)程對(duì)象的客戶(hù)端代理,有著和遠(yuǎn)程對(duì)象相同的遠(yuǎn)程接口。
遠(yuǎn)程對(duì)象的調(diào)用實(shí)際是通過(guò)調(diào)用該對(duì)象的客戶(hù)端代理對(duì)象stub來(lái)完成的。
創(chuàng)建遠(yuǎn)程方法調(diào)用的5個(gè)步驟:
1)定義一個(gè)擴(kuò)展了Remote接口的接口,該接口中的每一個(gè)方法必須聲明它將產(chǎn)生一個(gè)RemoteException異常;
2)定義一個(gè)實(shí)現(xiàn)該接口的類(lèi);
3)使用rmic程序生成遠(yuǎn)程實(shí)現(xiàn)所需的存根和框架;
(例如,在demo.rmi.EchoServer.java所在目錄運(yùn)行: rmic demo.rmi.EchoServer)
4)創(chuàng)建一個(gè)客戶(hù)程序和服務(wù)器進(jìn)行RMI調(diào)用;
5)啟動(dòng)rmiregistry并運(yùn)行自己的服務(wù)程序和客戶(hù)程序。
RMI與RPC的區(qū)別在于:
1)方法是如何被調(diào)用的
對(duì)RMI來(lái)說(shuō),如果一個(gè)方法在服務(wù)器上執(zhí)行,但是沒(méi)有相匹配的簽名被添加到這個(gè)遠(yuǎn)程接口上,那么這個(gè)新方法就不能被RMI客戶(hù)方所調(diào)用。
而在RPC中,當(dāng)一個(gè)請(qǐng)求到達(dá)RPC服務(wù)器時(shí),請(qǐng)求包含一個(gè)參數(shù)集和一個(gè)文本值,通常為“classname.methodname”形式。
這表明,請(qǐng)求的方法在“classname”類(lèi)中,名叫“methodname”。
然后,RPC服務(wù)器就去搜索與之相匹配的類(lèi)和方法,并把它作為那種方法參數(shù)類(lèi)型的輸入。
這里的參數(shù)類(lèi)型是與RPC請(qǐng)求中的類(lèi)型匹配的。 一旦匹配成功,方法就被調(diào)用了,其結(jié)果被編碼后返回客戶(hù)方。
2)對(duì)傳遞信息的限制
RMI 調(diào)用遠(yuǎn)程對(duì)象方法,允許方法返回 Java 對(duì)象以及基本數(shù)據(jù)類(lèi)型。
而RPC不允許傳遞對(duì)象,RPC服務(wù)的消息由外部數(shù)據(jù)表示(External Data Representation,XDR)語(yǔ)言來(lái)表示。
3)采用的協(xié)議不同
RPC不支持對(duì)象,采用http協(xié)議。RMI支持傳輸對(duì)象,采用TCP/IP協(xié)議
4)RIM只限于Java語(yǔ)言,而RPC跨語(yǔ)言
另外,RMI優(yōu)于RPC或SOAP的一點(diǎn)是:在程序開(kāi)發(fā)過(guò)程中因?yàn)閷?duì)象或方法不匹配造成的錯(cuò)誤可以在編譯期被發(fā)現(xiàn),而不用等到運(yùn)行期。
============================================================================
RPC, SOAP, WSDL的關(guān)系
============================================================================
RPC, SOAP, WSDL都是web service的關(guān)鍵詞,這里描述一下他們的關(guān)系,下面的解釋可能比較狹義,主要為了幫助理解這三者的關(guān)系。
1.RPC
如果要調(diào)用遠(yuǎn)端的一個(gè)方法,可以使用RMI和RPC,這是2種截然不同的風(fēng)格。
RMI: (Remote Method Invocation) 直接獲取遠(yuǎn)端方法的簽名,進(jìn)行調(diào)用。優(yōu)點(diǎn)是強(qiáng)類(lèi)型、編譯期可檢查錯(cuò)誤;缺點(diǎn)是只限于java語(yǔ)言
RPC: (Remote Procedure Call) 采用客戶(hù)端/服務(wù)器方式(請(qǐng)求/響應(yīng)),發(fā)送請(qǐng)求到服務(wù)器端,服務(wù)端執(zhí)行方法后返回結(jié)果。優(yōu)點(diǎn)是跨語(yǔ)言跨平臺(tái),缺點(diǎn)是編譯期無(wú)法排錯(cuò),只能在運(yùn)行時(shí)檢查。
2.SOAP
為了包裝RPC的請(qǐng)求信息,推出了XML-RPC,但XML-RPC只能使用有限的數(shù)據(jù)類(lèi)型種類(lèi)和一些簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。于是就出現(xiàn)了SOAP(Simple Object Access Protocol)。SOAP最主要的工作是使用標(biāo)準(zhǔn)的XML描述了RPC的請(qǐng)求信息(URI/類(lèi)/方法/參數(shù)/返回值)。理論上,SOAP就是一段xml,你可以通過(guò)http,smtp等發(fā)送它(復(fù)制到軟盤(pán)上,叫快遞公司送去也行?)。同樣SOAP也是跨語(yǔ)言的。
3.WSDL
WSDL(Web Services Description Language)是描述web服務(wù)的,是描述怎樣訪(fǎng)問(wèn)web服務(wù)的。WSDL是用來(lái)描述SOAP的,換句話(huà)說(shuō),WSDL 文件告訴你調(diào)用 SOAP 所需要知道的一切。WSDL也是一段xml?,F(xiàn)在各個(gè)語(yǔ)言對(duì)wsdl的支持都很成熟,可以根據(jù)同一份wsdl文件生成自己語(yǔ)言的客戶(hù)端。
- 通過(guò) Redis 實(shí)現(xiàn) RPC 遠(yuǎn)程方法調(diào)用(支持多種編程語(yǔ)言)
- Python中實(shí)現(xiàn)遠(yuǎn)程調(diào)用(RPC、RMI)簡(jiǎn)單例子
- Java利用Sping框架編寫(xiě)RPC遠(yuǎn)程過(guò)程調(diào)用服務(wù)的教程
- php實(shí)現(xiàn)的一個(gè)簡(jiǎn)單json rpc框架實(shí)例
- python使用rpc框架gRPC的方法
- 對(duì)python調(diào)用RPC接口的實(shí)例詳解
- Java實(shí)現(xiàn)簡(jiǎn)單的RPC框架的示例代碼
- 關(guān)于rpc長(zhǎng)連接與短連接的思考記錄
相關(guān)文章
BurpSuite超詳細(xì)安裝和基礎(chǔ)使用教程(已破解)
Burp?Suite?是用于攻擊web?應(yīng)用程序的集成平臺(tái)包含了許多Burp工具,它主要用來(lái)做安全性滲透測(cè)試,可以實(shí)現(xiàn)攔截請(qǐng)求、Burp?Spider爬蟲(chóng)、漏洞掃描(付費(fèi))等類(lèi)似Fiddler和Postman但比其更強(qiáng)大的功能,今天給大家介紹下BurpSuite安裝破解使用教程,感興趣的朋友一起看看吧2022-10-10聯(lián)邦學(xué)習(xí)論文解讀分散數(shù)據(jù)的深層網(wǎng)絡(luò)通信
這篇文章主要為大家介紹了論文解讀分散數(shù)據(jù)的深層網(wǎng)絡(luò)通信有效學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05解讀Base64編碼中為什么會(huì)有等號(hào)(=)問(wèn)題
這篇文章主要介紹了解讀Base64編碼中為什么會(huì)有等號(hào)(=)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03詳解git submodule HEAD detached 的問(wèn)題
這篇文章主要介紹了詳解git submodule HEAD detached 的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08如果你有這33種癥狀了請(qǐng)離開(kāi)電腦去走走吧!
這篇文章主要介紹了如果你有這33種癥狀了請(qǐng)離開(kāi)電腦去走走吧!本文是關(guān)注程序員、上班族身心健康的文章,需要的朋友可以參考下2014-09-09asp.net php asp jsp 301重定向的代碼(集合)
介紹一下針對(duì)各類(lèi)程序系統(tǒng)實(shí)施301重定向的代碼,需要的朋友可以參考下。2010-11-11qqwry.dat的數(shù)據(jù)結(jié)構(gòu)圖文解釋
QQwry.dat可以看作是一種數(shù)據(jù)文件,通過(guò)它能完成以下任務(wù)2009-02-02