一:首先弄清概念的東西,RPC與RMI的區(qū)別
(1)RPC:(Remote Procedure Call)?
被設(shè)計為在應用程序間通信的平臺中立的方式听怕,它不理會操作系統(tǒng)之間以及語言之間的差異。 支持多語言粱挡。
(2)RMI:(Remote Method Invocation)?
RPC 的Java版本何暮,EJB的基礎(chǔ)技術(shù)?
RMI 采用JRMP(Java Remote Method Protocol)通訊協(xié)議裤园,是構(gòu)建在TCP/IP協(xié)議上的一種遠程調(diào)用方法。?
RMI 采用stubs和skeletons來進行遠程對象的通訊。?
stub充當遠程對象的客戶端代理得问,有著和遠程對象相同的遠程接口囤攀。?
遠程對象的調(diào)用實際是通過調(diào)用該對象的客戶端代理對象stub來完成的。
(3)RMI與RPC的區(qū)別在于:?
1)方法是如何被調(diào)用的
對RMI來說宫纬,如果一個方法在服務器上執(zhí)行焚挠,但是沒有相匹配的簽名被添加到這個遠程接口上,那么這個新方法就不能被RMI客戶方所調(diào)用漓骚。?
而在RPC中蝌衔,當一個請求到達RPC服務器時,請求包含一個參數(shù)集和一個文本值蝌蹂,通常為“classname.methodname”形式噩斟。?
這表明,請求的方法在“classname”類中孤个,名叫“methodname”剃允。?
然后,RPC服務器就去搜索與之相匹配的類和方法齐鲤,并把它作為那種方法參數(shù)類型的輸入斥废。?
這里的參數(shù)類型是與RPC請求中的類型匹配的。 一旦匹配成功给郊,方法就被調(diào)用了牡肉,其結(jié)果被編碼后返回客戶方。
2)對傳遞信息的限制
RMI 調(diào)用遠程對象方法淆九,允許方法返回 Java 對象以及基本數(shù)據(jù)類型统锤。?
而RPC不允許傳遞對象,RPC服務的消息由外部數(shù)據(jù)表示(External Data Representation炭庙,XDR)語言來表示饲窿。
3)采用的協(xié)議不同
??? RPC不支持對象,采用http協(xié)議焕蹄。RMI支持傳輸對象逾雄,采用TCP/IP協(xié)議
4)RIM只限于Java語言,而RPC跨語言
另外擦盾,RMI優(yōu)于RPC或SOAP的一點是:在程序開發(fā)過程中因為對象或方法不匹配造成的錯誤可以在編譯期被發(fā)現(xiàn)嘲驾,而不用等到運行期。
二:首先弄清概念的東西:RPC, SOAP, WSDL的關(guān)系
1.RPC
如果要調(diào)用遠端的一個方法迹卢,可以使用RMI和RPC辽故,這是2種截然不同的風格。
RMI: (Remote Method Invocation) 直接獲取遠端方法的簽名腐碱,進行調(diào)用誊垢。優(yōu)點是強類型掉弛、編譯期可檢查錯誤;缺點是只限于java語言
RPC: (Remote Procedure Call) 采用客戶端/服務器方式(請求/響應)喂走,發(fā)送請求到服務器端殃饿,服務端執(zhí)行方法后返回結(jié)果。優(yōu)點是跨語言跨平臺芋肠,缺點是編譯期無法排錯乎芳,只能在運行時檢查。
2.SOAP
為了包裝RPC的請求信息帖池,推出了XML-RPC奈惑,但XML-RPC只能使用有限的數(shù)據(jù)類型種類和一些簡單的數(shù)據(jù)結(jié)構(gòu)。于是就出現(xiàn)了SOAP(Simple Object Access Protocol)睡汹。SOAP最主要的工作是使用標準的XML描述了RPC的請求信息(URI/類/方法/參數(shù)/返回值)肴甸。理論上,SOAP就是一段xml囚巴,你可以通過http,smtp等發(fā)送它(復制到軟盤上原在,叫快遞公司送去也行?)。同樣SOAP也是跨語言的彤叉。
3.WSDL
WSDL(Web Services Description Language)是描述web服務的庶柿,是描述怎樣訪問web服務的。WSDL是用來描述SOAP的姆坚,換句話說澳泵,WSDL 文件告訴你調(diào)用 SOAP 所需要知道的一切实愚。WSDL也是一段xml〖婧牵現(xiàn)在各個語言對wsdl的支持都很成熟,可以根據(jù)同一份wsdl文件生成自己語言的客戶端腊敲。