下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、其實(shí)所謂的遠(yuǎn)程,并不是說跨機(jī)器、跨網(wǎng)絡(luò)就是遠(yuǎn)程,只要是兩個(gè)進(jìn)程之間的調(diào)用,就算是遠(yuǎn)程調(diào)用了 也就是說只要是不在同一個(gè)JVM里面(更準(zhǔn)確的來說是不在同一個(gè)地址空間內(nèi))的調(diào)用,它就是遠(yuǎn)程調(diào)用 也就是說如果我們?cè)谕粋€(gè)機(jī)器上,啟動(dòng)兩個(gè)進(jìn)程,然后進(jìn)行互相調(diào)用,那么這個(gè)過程就已經(jīng)是遠(yuǎn)程調(diào)用了 分布式通信的基本原理: 主要是使用客戶端上的Stub(存根)和遠(yuǎn)程對(duì)象上的Skeleton(骨架)作為中介,來實(shí)現(xiàn)分布式通信的,在客戶端會(huì)有一個(gè)叫做Stub(存根)的東西,其實(shí)現(xiàn)采用的是非常典型的代理模式,是遠(yuǎn)程對(duì)象在客戶端的代理 Stub會(huì)封裝所交互的數(shù)據(jù)的訪問細(xì)節(jié)(如何壓縮、壓包、編碼等),然后通過相應(yīng)的協(xié)議與
2、Skeleton(骨架)交換數(shù)據(jù) 對(duì)于Java領(lǐng)域的分布式通信技術(shù),較常見的有EJB技術(shù)、CORBA技術(shù)、WebService技術(shù)等等 如果是EJB技術(shù),那么Stub就會(huì)采用RMI-IIOP協(xié)議來傳送數(shù)據(jù)給Skeleton 如果是CORBA技術(shù),那么Stub就會(huì)采用IIOP協(xié)議來傳送數(shù)據(jù)給Skeleton 如果是WebServices技術(shù),那么Stub就會(huì)通過SOAP協(xié)議來傳送數(shù)據(jù)給Skeleton 也就是說Stub會(huì)按照特定協(xié)議將信息傳送給Skeletion 而Skeleton會(huì)將Stub傳送過來的數(shù)據(jù)解析成特定的語言對(duì)象并發(fā)送給遠(yuǎn)程對(duì)象,即服務(wù)端 比如說服務(wù)端是采用Java開發(fā)的,那么Sk
3、eleton就會(huì)將接收到的數(shù)據(jù)解析成Java對(duì)象,再傳送給服務(wù)端 同理若服務(wù)端是采用C#開發(fā)的,那么Skeleton就會(huì)將接收到的數(shù)據(jù)解析成C#對(duì)象,再傳送給服務(wù)端 接著服務(wù)端就會(huì)返回信息給客戶端,于是Skeleton就會(huì)將所要返回的信息進(jìn)行壓縮編碼并通過相應(yīng)的協(xié)議傳送給Stub 接著Stub就會(huì)將Skeleton傳送過來的信息解開,再傳送給客戶端,所以客戶端就獲得了相應(yīng)的服務(wù)端的返回信息了 這里的客戶端對(duì)象和遠(yuǎn)程對(duì)象是位于不同的JVM中的,或者說是不同的系統(tǒng)平臺(tái)中,此即分布式通信 它主要就是靠Stub和Skeleton來通訊,說白了,分布式通信也就是Stub和Skeleton之間的通信 分布
4、式通信的舉例 假設(shè)有兩個(gè)服務(wù)器,本地的服務(wù)器采用的是Java開發(fā)的,遠(yuǎn)程的是一個(gè)采用C#開發(fā)的天氣預(yù)報(bào)的服務(wù)器,二者可以通過以下幾種方式通信 1、如果二者不采用某些技術(shù)來通信的話,也是可以的 比如遠(yuǎn)程服務(wù)器開放數(shù)據(jù)庫表,然后本地服務(wù)器使用JDBC訪問這個(gè)開放的數(shù)據(jù)庫表,也能夠?qū)崿F(xiàn)分布式通信 只不過開放數(shù)據(jù)庫表的做法,不太好。會(huì)暴露表結(jié)構(gòu)、安全性也不是特別好、并且也是不標(biāo)準(zhǔn)的 另外有些數(shù)據(jù),并不是單純的一張表就能體現(xiàn)出來的,可能要通過一定的算法計(jì)算出來結(jié)果的 2、如果二者采用WebServices通信的話,那么就是使用SOAP協(xié)議來交互數(shù)據(jù),該數(shù)據(jù)就是采用HTTP協(xié)議傳送XML文件 但此時(shí)雙方進(jìn)
5、行通信的過程中,由于采用的是SOAP協(xié)議,所以雙方交換的數(shù)據(jù)是大文本(通常是XML文件)文件 這時(shí)就有一個(gè)問題:假設(shè)需要請(qǐng)求10000條數(shù)據(jù),那么所交換的這個(gè)大文本文件的體積,將會(huì)是非常大的,傳送的過程就會(huì)很耗時(shí) 有一個(gè)解決辦法是:可以讓Java通過它的ZIPAPI壓縮該XML文件,然后上傳到FTPServer上,服務(wù)端再下載這個(gè)壓縮后的XML文件 接著服務(wù)端再解壓縮這個(gè)XML文件,然后讀取,再進(jìn)行相應(yīng)的處理,這也是解決SOAP協(xié)議傳遞大文本文件的速度特別慢的辦法之一 3、可以令遠(yuǎn)程服務(wù)器把天氣預(yù)報(bào)的數(shù)據(jù),定時(shí)的上報(bào)到某一個(gè)FTPServer,然后客戶端的Java程序也定時(shí)的到FTPServe
6、r上取數(shù)據(jù) 4、第三種方式的缺點(diǎn)是不實(shí)時(shí)。我們也可以讓客戶端發(fā)送消息給遠(yuǎn)程的服務(wù)端,服務(wù)端偵聽,然后再發(fā)送消息返回給客戶端 5、二者采用純粹的IIOP(屬于CORBA技術(shù)架構(gòu))協(xié)議來通信 6、如果遠(yuǎn)程服務(wù)器是采用EJB開發(fā)的,那么二者可以通過RMI-IIOP協(xié)議通信。而RMI-IIOP協(xié)議采用的是二進(jìn)制傳輸,效率會(huì)更快 由于EJB也應(yīng)用了CORBA的IIOP協(xié)議,所以在異構(gòu)系統(tǒng)整合的時(shí)候,CORBA的互通性會(huì)比較好 步驟大致是服務(wù)器端先把EJB注射到JNDI樹上,然后客戶端的Java程序lookup這個(gè)JNDI樹上對(duì)應(yīng)的名字,這樣EJB就傳過來了 也就是說此時(shí)Stub就動(dòng)態(tài)的傳到客戶端的Jav
7、a程序中了,然后客戶端就調(diào)用Stub,接下來就是Stub和Skeleton打交道了 另外EJB只能使用Java來寫,但是可以使用CORBA技術(shù)來調(diào)用EJB EJB的前生 在EJB1.X的時(shí)候,對(duì)于分布式通信的服務(wù)的支持還很差 比如寫一個(gè)EJB的話,則至少要寫三個(gè)類,然后編譯,編譯成Stub和Skeleton,這時(shí)大約會(huì)編譯出來5、6個(gè)類 后來有所改善,最先改的就是JBOSS。開發(fā)JBOSS的EJB容器的這個(gè)人,他引入了JDK的動(dòng)態(tài)代理來完成Stub的自動(dòng)生成,所以EJB的開發(fā)就簡(jiǎn)單了一些,只寫三個(gè)類就可以了,存根會(huì)在運(yùn)行時(shí)生成也就是在把EJB注射到JNDI上之后,我們就可以在另一個(gè)JVM里面l
8、ookup這個(gè)JNDI的名字,這樣便得到了EJB然后它就會(huì)序列化的把EJB傳送到客戶端,它傳的就是Stub,而它在JVM內(nèi)存里面是看不見的,當(dāng)我們?cè)诳蛻舳苏{(diào)用相應(yīng)方法的時(shí)候,其實(shí)在內(nèi)存里面調(diào)用的就是Stub,然后Stub再與遠(yuǎn)端打交道 WebServices解決異構(gòu)系統(tǒng)之間的通信 從標(biāo)準(zhǔn)上來說,整個(gè)技術(shù)架構(gòu)是WebServices(帶s的), 有時(shí)會(huì)看到很多人寫成WebService(不帶s的),其實(shí)這是不標(biāo)準(zhǔn)的 WebService指的是單獨(dú)一個(gè)服務(wù),而WebServices指的是它的技術(shù)架構(gòu) 目前WebServices技術(shù)使用的稍多些,因?yàn)樗叩氖荋TTP協(xié)議,它可以穿越防火墻,它天生就能
9、穿越80端口 但是WebServices的缺點(diǎn)就是:慢!因?yàn)閃ebServices是基于HTTP協(xié)議傳送大文本,實(shí)際傳送的是XML文件 而IIOP(屬于CORBA技術(shù)架構(gòu))協(xié)議傳送的就是二進(jìn)制,所以它的效率要比WebServices快很多 所以在一些行業(yè)里,也大量的使用了CORBA技術(shù),比如說電信網(wǎng) 而CORBA的缺點(diǎn)就是:編程模型復(fù)雜,它是屬于重量級(jí)的 SOAP簡(jiǎn)單對(duì)象訪問協(xié)議 假設(shè)我們?cè)诒镜赝ㄟ^Java寫一個(gè)main()方法與遠(yuǎn)程的一個(gè)可以是用任何語言寫的取得天氣預(yù)報(bào)的服務(wù)打交道 如果打交道的過程中采用的是WebServices技術(shù)的話,那么它傳送給遠(yuǎn)程的就是XML文件,使用的是SOAP協(xié)
10、議 SOAP即簡(jiǎn)單對(duì)象訪問協(xié)議,其實(shí)質(zhì)就是HTTP+XML,也就是說它是通過HTTP協(xié)議來傳送XML文件 也就是說SOAP是基于XML的簡(jiǎn)易協(xié)議,可以使應(yīng)用程序在HTTP之上進(jìn)行信息交換 或者更簡(jiǎn)單地說SOAP是用于訪問網(wǎng)絡(luò)服務(wù)的協(xié)議,而一條SOAP消息就是一個(gè)普通的XML文檔 使用SOAP協(xié)議通信的過程中,遠(yuǎn)程對(duì)象會(huì)將所要返回的信息形成一個(gè)XML文件傳給Stub 然后客戶端就會(huì)把XML文件轉(zhuǎn)換成Java對(duì)象,而當(dāng)客戶端在調(diào)用遠(yuǎn)程服務(wù)時(shí) 客戶端就會(huì)把Java對(duì)象轉(zhuǎn)換成XML文件作為參數(shù)傳給Skeleton,而Skeleton就負(fù)責(zé)把XML文件轉(zhuǎn)換成遠(yuǎn)程服務(wù)的相應(yīng)語言的對(duì)象 比如說服務(wù)端是采用J
11、ava開發(fā)的,那么Skeleton就會(huì)將接收到的數(shù)據(jù)解析成Java對(duì)象,再傳送給服務(wù)端 同理若服務(wù)端是采用C#開發(fā)的,那么Skeleton就會(huì)將接收到的數(shù)據(jù)解析成C#對(duì)象,再傳送給服務(wù)端 所以,WebServices能夠?qū)崿F(xiàn)異構(gòu)語言的通信,可以用來整合異構(gòu)系統(tǒng) 同理,如果不是異構(gòu)系統(tǒng)的話,也就沒有必要使用WebServices技術(shù) 比如說客戶端和遠(yuǎn)程對(duì)象都是采用Java開發(fā)的,那么就沒有必要使用WebServices了 因?yàn)槎叨际遣捎肑ava開發(fā)的,它們之間可以直接以二進(jìn)制來傳輸數(shù)據(jù),訪問效率會(huì)快的很多 而WebServices其實(shí)就是基于XML的數(shù)據(jù)交換,即WebServices所傳送的是
12、大文本,效率自然就慢了 除非我們的系統(tǒng)是采用多語言開發(fā)的,那么就可以考慮使用WebServices技術(shù) 或者說我們的系統(tǒng)想做的通用一些,則可以采用并開放WebServices的一些方法 其實(shí)SOAP就是用來最終完成Web服務(wù)的調(diào)用的,而WSDL則用于描述如何使用SOAP來調(diào)用Web服務(wù) WSDLWebServices描述語言 仍以上面為例,即客戶端采用Java開發(fā),服務(wù)端是采用C#開發(fā)的天氣預(yù)報(bào)的服務(wù) 作為客戶端,它知道在服務(wù)端提供了一個(gè)能夠獲取天氣預(yù)報(bào)的服務(wù),并且客戶端也可以調(diào)用該服務(wù) 但作為服務(wù)端,應(yīng)該對(duì)這些服務(wù)進(jìn)行描述,以告訴客戶端都有哪些服務(wù)可供調(diào)用 而這個(gè)服務(wù)是不能用C#語言來描述的
13、,因?yàn)椴捎肑ava開發(fā)的客戶端是無法識(shí)別的 所以服務(wù)端就需要使用一套語言來描述它所提供的服務(wù),這套語言就是WSDL 其實(shí)WSDL就是一個(gè)XML文件,也就是說WebServices定義了一套標(biāo)準(zhǔn),里面都是XML格式 使用這套標(biāo)準(zhǔn)來描述服務(wù)端對(duì)外提供的服務(wù),比如C#的方法名、參數(shù)名、返回值等信息 假設(shè)服務(wù)端的天氣預(yù)報(bào)功能還沒有使用C#來實(shí)現(xiàn),并且客戶端也沒有使用Java來實(shí)現(xiàn) 這時(shí)突然要求定義一套標(biāo)準(zhǔn)來描述一下即將準(zhǔn)備實(shí)現(xiàn)的服務(wù)端的天氣預(yù)報(bào)的功能 并且客戶端可以任意調(diào)用這個(gè)天氣預(yù)報(bào)功能,此時(shí)就可以寫一套WSDL來描述方法名、參數(shù)、返回值等信息。 當(dāng)服務(wù)端的C#得到該WSDL時(shí),就可以通過WSDL生成C#代碼,然后它就可以把取得天氣預(yù)報(bào)功能的邏輯補(bǔ)充上, 而客戶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年(ESG管理)社會(huì)責(zé)任試題及答案
- 2025年?duì)t外精煉工職業(yè)技能考試題庫及答案(完整版)
- 2025年水利技術(shù)和管理測(cè)試題及答案
- 車聯(lián)網(wǎng)技術(shù)與應(yīng)用手冊(cè)
- 重慶市兩江育才中學(xué)2025-2026學(xué)年高二上學(xué)期第二次月考英語試題(原卷版)
- 山東省平邑縣曾子學(xué)校人教版高中生物選修三學(xué)案41轉(zhuǎn)基因生物的安全性
- 56積的小數(shù)位數(shù)不夠的小數(shù)乘法 五年級(jí)上冊(cè)同步課件 蘇教版
- 中小學(xué)數(shù)學(xué)智能教育資源游戲化設(shè)計(jì)培養(yǎng)學(xué)生的數(shù)學(xué)問題解決能力教學(xué)研究課題報(bào)告
- 基于大數(shù)據(jù)的個(gè)性化學(xué)習(xí)支持系統(tǒng)在教育信息化中的應(yīng)用策略教學(xué)研究課題報(bào)告
- 第9章-綜合布線工程案例
- 棄渣場(chǎng)使用規(guī)劃方案
- 滑坡穩(wěn)定性評(píng)價(jià)
- TTSSP 045-2023 油茶果機(jī)械化爆蒲及油茶籽干制加工技術(shù)規(guī)程
- JCT 871-2023 鍍銀玻璃鏡 (正式版)
- 2024年廣東深圳市龍崗區(qū)南灣街道綜合網(wǎng)格員招聘筆試沖刺題(帶答案解析)
- 《兒科護(hù)理學(xué)》課件-兒童健康評(píng)估特點(diǎn)
- 廣東省深圳市南山區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末科學(xué)試卷
- 臨床研究數(shù)據(jù)清洗與質(zhì)量控制
- 基礎(chǔ)拓?fù)鋵W(xué)講義答案尤承業(yè)
- 1種植業(yè)及養(yǎng)殖業(yè)賬務(wù)處理及科目設(shè)置
- 淺析幼小銜接中大班幼兒時(shí)間觀念的培養(yǎng)對(duì)策 論文
評(píng)論
0/150
提交評(píng)論