第一章中間件_第1頁(yè)
第一章中間件_第2頁(yè)
第一章中間件_第3頁(yè)
第一章中間件_第4頁(yè)
第一章中間件_第5頁(yè)
已閱讀5頁(yè),還剩63頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院基礎(chǔ)技術(shù)教學(xué)部中間件技術(shù)中間件技術(shù) Middleware Technology 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院聯(lián)系方式聯(lián)系方式鹿旭東鹿旭東 D計(jì)算機(jī)軟件工程系計(jì)算機(jī)軟件工程系山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院先修課程先修課程面向?qū)ο蠹夹g(shù)面向?qū)ο蠹夹g(shù)Java語(yǔ)言程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)軟件工程軟件工程山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院內(nèi)容簡(jiǎn)介內(nèi)容簡(jiǎn)介 中間件已經(jīng)成為構(gòu)建網(wǎng)絡(luò)分布式異構(gòu)信息系統(tǒng)不可中間件已經(jīng)成為構(gòu)建網(wǎng)絡(luò)分布式異構(gòu)信息系統(tǒng)不可缺少的關(guān)鍵技術(shù),與操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)并缺少的關(guān)鍵技術(shù),與操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)并列為基礎(chǔ)軟件體系的三大支柱。列為基礎(chǔ)

2、軟件體系的三大支柱。本課程將闡述中間件產(chǎn)生的背景,中間件概念、定本課程將闡述中間件產(chǎn)生的背景,中間件概念、定義及發(fā)展情況,中間件的功能、作用、特點(diǎn)、分類、義及發(fā)展情況,中間件的功能、作用、特點(diǎn)、分類、優(yōu)越性、面臨的問(wèn)題及發(fā)展趨勢(shì)。將以優(yōu)越性、面臨的問(wèn)題及發(fā)展趨勢(shì)。將以O(shè)MGOMG組織的組織的CORBACORBA和和SunSun公司的公司的EJBEJB規(guī)范為例,闡述中間件基本框規(guī)范為例,闡述中間件基本框架、工作原理和實(shí)現(xiàn)的關(guān)鍵技術(shù)。并介紹當(dāng)前技術(shù)架、工作原理和實(shí)現(xiàn)的關(guān)鍵技術(shù)。并介紹當(dāng)前技術(shù)及相應(yīng)框架。及相應(yīng)框架。 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院計(jì)算:從集中到分布計(jì)算:從集中到分布計(jì)算模式的發(fā)展計(jì)算

3、模式的發(fā)展 集中式計(jì)算模式集中式計(jì)算模式 桌面計(jì)算模式桌面計(jì)算模式 分布式計(jì)算模式分布式計(jì)算模式山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院軟件設(shè)計(jì)的基本思想(軟件設(shè)計(jì)的基本思想(1)隱式地(隱式地(implicitly)與顯式地)與顯式地(explicitly) 兩種不同的支持方式兩種不同的支持方式對(duì)面向?qū)ο笤O(shè)計(jì)的支持對(duì)異常的支持對(duì)象約束的支持底層支持來(lái)解決分布式軟件的復(fù)雜性邏輯的邏輯的(logical)與物理的與物理的(physical) 不同的抽象層次不同的抽象層次抽象定義源于對(duì)復(fù)雜控制性的不足目的是在更高層次上掌握各種機(jī)制山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院軟件設(shè)計(jì)的基本思想(軟件設(shè)計(jì)的基本思想(2)面向?qū)ο?/p>

4、技術(shù)面向?qū)ο蠹夹g(shù) 本質(zhì)上是一個(gè)建模過(guò)程本質(zhì)上是一個(gè)建模過(guò)程 封裝、繼承、多態(tài)性封裝、繼承、多態(tài)性 有機(jī)融合分布式和面向?qū)ο蠹夹g(shù)有機(jī)融合分布式和面向?qū)ο蠹夹g(shù)RPC和RMICorbaEJBDCOM軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu) 從體系結(jié)構(gòu)角度探討分布式軟件系統(tǒng)的有關(guān)問(wèn)題從體系結(jié)構(gòu)角度探討分布式軟件系統(tǒng)的有關(guān)問(wèn)題山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院分布式系統(tǒng)應(yīng)用分布式系統(tǒng)應(yīng)用一些典型的商務(wù)應(yīng)用系統(tǒng):一些典型的商務(wù)應(yīng)用系統(tǒng): 股票交易系統(tǒng)股票交易系統(tǒng) 銀行應(yīng)用系統(tǒng)銀行應(yīng)用系統(tǒng) 客戶電話中心系統(tǒng)客戶電話中心系統(tǒng) 采購(gòu)系統(tǒng)采購(gòu)系統(tǒng)這些系統(tǒng)都應(yīng)是分布式系統(tǒng)這些系統(tǒng)都應(yīng)是分布式系統(tǒng)山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院現(xiàn)代應(yīng)用系統(tǒng)的

5、基本特征現(xiàn)代應(yīng)用系統(tǒng)的基本特征分布分布 任務(wù)已不只是在單機(jī)上運(yùn)行,而是由網(wǎng)絡(luò)中多臺(tái)任務(wù)已不只是在單機(jī)上運(yùn)行,而是由網(wǎng)絡(luò)中多臺(tái)計(jì)算機(jī)上的相關(guān)應(yīng)用共同協(xié)作完成,需考慮網(wǎng)絡(luò)傳輸、數(shù)據(jù)計(jì)算機(jī)上的相關(guān)應(yīng)用共同協(xié)作完成,需考慮網(wǎng)絡(luò)傳輸、數(shù)據(jù)安全、數(shù)據(jù)一致性、同步等諸多問(wèn)題;安全、數(shù)據(jù)一致性、同步等諸多問(wèn)題;異構(gòu)異構(gòu) 計(jì)算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)庫(kù)系計(jì)算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)庫(kù)系統(tǒng)以及開發(fā)工具種類繁多,需考慮數(shù)據(jù)表示、調(diào)用接口、處統(tǒng)以及開發(fā)工具種類繁多,需考慮數(shù)據(jù)表示、調(diào)用接口、處理方式等諸多問(wèn)題;理方式等諸多問(wèn)題;動(dòng)態(tài)協(xié)作動(dòng)態(tài)協(xié)作 參與協(xié)作的應(yīng)用允許位置透明性、遷移參與協(xié)作的應(yīng)用允許位置

6、透明性、遷移透明性、負(fù)載平衡性等需求。透明性、負(fù)載平衡性等需求。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院傳統(tǒng)的傳統(tǒng)的Client/Server結(jié)構(gòu)結(jié)構(gòu)數(shù)據(jù)庫(kù)ClientClientClient數(shù)據(jù)庫(kù)服務(wù)器服務(wù)器(數(shù)據(jù))層客戶層客戶向服務(wù)器請(qǐng)求數(shù)據(jù)庫(kù)服務(wù)山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院廣義的廣義的C/S體系結(jié)構(gòu)體系結(jié)構(gòu)信息提供和請(qǐng)求服務(wù)信息提供和請(qǐng)求服務(wù)過(guò)程式程序設(shè)計(jì)中的過(guò)程調(diào)用過(guò)程式程序設(shè)計(jì)中的過(guò)程調(diào)用 接口(接口(interface、規(guī)格說(shuō)明)、規(guī)格說(shuō)明) 通信協(xié)議(參數(shù)傳遞風(fēng)格)通信協(xié)議(參數(shù)傳遞風(fēng)格)分布式程序一般是分布式程序一般是C/S結(jié)構(gòu)的,重要的是接口和通信結(jié)構(gòu)的,重要的是接口和通信協(xié)議,此外還有

7、可靠性、安全性、性能等因素協(xié)議,此外還有可靠性、安全性、性能等因素山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2層結(jié)構(gòu)的缺陷層結(jié)構(gòu)的缺陷2層結(jié)構(gòu)存在很多缺陷:層結(jié)構(gòu)存在很多缺陷: 客戶端的負(fù)擔(dān)仍比較重客戶端的負(fù)擔(dān)仍比較重仍然需要客戶端進(jìn)行較復(fù)雜的數(shù)據(jù)處理 客戶端的可移植性不好客戶端的可移植性不好處理復(fù)雜必然牽涉更多的移植性問(wèn)題每個(gè)客戶端上都要安裝數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序 系統(tǒng)的可維護(hù)性不好系統(tǒng)的可維護(hù)性不好客戶端包含過(guò)多的商業(yè)邏輯商業(yè)邏輯與人機(jī)交互界面交織在一起 數(shù)據(jù)的安全性數(shù)據(jù)的安全性需求:需要更合理的工作分配需求:需要更合理的工作分配3層或多層結(jié)構(gòu)層或多層結(jié)構(gòu)山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院典型的典型的3層結(jié)構(gòu)層結(jié)構(gòu)數(shù)

8、據(jù)庫(kù)ClientClientClient數(shù)據(jù)庫(kù)服務(wù)器服務(wù)器(數(shù)據(jù))層中間層中間層服務(wù)器向數(shù)據(jù)庫(kù)服務(wù)器請(qǐng)求中間層應(yīng)用程序中間層客戶層客戶向中間層服務(wù)器請(qǐng)求山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院3層結(jié)構(gòu)的優(yōu)點(diǎn)(層結(jié)構(gòu)的優(yōu)點(diǎn)(1 of 2)除了更合理的分配任務(wù)外,除了更合理的分配任務(wù)外,3層結(jié)構(gòu)還具有如下優(yōu)點(diǎn):層結(jié)構(gòu)還具有如下優(yōu)點(diǎn): 將業(yè)務(wù)邏輯放置在中間層可以提高系統(tǒng)的性能,使中間層的業(yè)將業(yè)務(wù)邏輯放置在中間層可以提高系統(tǒng)的性能,使中間層的業(yè)務(wù)邏輯處理與數(shù)據(jù)層的業(yè)務(wù)數(shù)據(jù)緊密結(jié)合在一起,而無(wú)需考慮務(wù)邏輯處理與數(shù)據(jù)層的業(yè)務(wù)數(shù)據(jù)緊密結(jié)合在一起,而無(wú)需考慮客戶的具體位置??蛻舻木唧w位置。 添加新的中間層服務(wù)器能夠滿足新

9、增客戶機(jī)的需求,可以大大添加新的中間層服務(wù)器能夠滿足新增客戶機(jī)的需求,可以大大提高提高3層系統(tǒng)的可伸縮性。層系統(tǒng)的可伸縮性。 將業(yè)務(wù)邏輯從客戶端移到中間層,在客戶層的應(yīng)用程序與數(shù)據(jù)將業(yè)務(wù)邏輯從客戶端移到中間層,在客戶層的應(yīng)用程序與數(shù)據(jù)層的數(shù)據(jù)庫(kù)之間增加了一層,這樣客戶端的應(yīng)用程序可以獨(dú)立層的數(shù)據(jù)庫(kù)之間增加了一層,這樣客戶端的應(yīng)用程序可以獨(dú)立于數(shù)據(jù)層的數(shù)據(jù)庫(kù)。于數(shù)據(jù)層的數(shù)據(jù)庫(kù)。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院3層結(jié)構(gòu)的優(yōu)點(diǎn)(層結(jié)構(gòu)的優(yōu)點(diǎn)(2 of 2) 將業(yè)務(wù)邏輯致于中間層,從而使業(yè)務(wù)邏輯集中到一處。而在將業(yè)務(wù)邏輯致于中間層,從而使業(yè)務(wù)邏輯集中到一處。而在2層方式層方式下,業(yè)務(wù)邏輯被分散到所有的客戶

10、機(jī)上(除非使用存儲(chǔ)過(guò)程)。這樣下,業(yè)務(wù)邏輯被分散到所有的客戶機(jī)上(除非使用存儲(chǔ)過(guò)程)。這樣做是不可取的,因?yàn)闃I(yè)務(wù)規(guī)則是動(dòng)態(tài)變化的,而對(duì)于這些業(yè)務(wù)而言,做是不可取的,因?yàn)闃I(yè)務(wù)規(guī)則是動(dòng)態(tài)變化的,而對(duì)于這些業(yè)務(wù)而言,規(guī)范又是強(qiáng)制性的,所以,將業(yè)務(wù)邏輯分散到整個(gè)客戶層的客戶機(jī)上規(guī)范又是強(qiáng)制性的,所以,將業(yè)務(wù)邏輯分散到整個(gè)客戶層的客戶機(jī)上會(huì)使實(shí)施過(guò)程變得非常困難。會(huì)使實(shí)施過(guò)程變得非常困難。 大量的中間層中間件平臺(tái)提供豐富的系統(tǒng)級(jí)服務(wù),使得開發(fā)人員可以大量的中間層中間件平臺(tái)提供豐富的系統(tǒng)級(jí)服務(wù),使得開發(fā)人員可以以更少的工作量開發(fā)出更復(fù)雜、可靠、高效的軟件系統(tǒng)。以更少的工作量開發(fā)出更復(fù)雜、可靠、高效的軟件系

11、統(tǒng)。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院N層結(jié)構(gòu)層結(jié)構(gòu)在在3層結(jié)構(gòu)中,客戶層和數(shù)據(jù)層已被嚴(yán)格定義,但中層結(jié)構(gòu)中,客戶層和數(shù)據(jù)層已被嚴(yán)格定義,但中間層并未明確定義。間層并未明確定義。中間層可以包括所有與應(yīng)用程序的界面和持久數(shù)據(jù)中間層可以包括所有與應(yīng)用程序的界面和持久數(shù)據(jù)存儲(chǔ)無(wú)關(guān)的處理。假定將中間層劃分成許多服務(wù)程存儲(chǔ)無(wú)關(guān)的處理。假定將中間層劃分成許多服務(wù)程序是符合邏輯的,那么將每一主要服務(wù)都視為獨(dú)立序是符合邏輯的,那么將每一主要服務(wù)都視為獨(dú)立的層,則的層,則3層結(jié)構(gòu)就成為了層結(jié)構(gòu)就成為了n層結(jié)構(gòu)。層結(jié)構(gòu)。 如中間層可以分為實(shí)現(xiàn)任務(wù)分配機(jī)制和界面呈現(xiàn)的如中間層可以分為實(shí)現(xiàn)任務(wù)分配機(jī)制和界面呈現(xiàn)的Web服務(wù)

12、器服務(wù)器層和實(shí)現(xiàn)實(shí)際商業(yè)邏輯的層和實(shí)現(xiàn)實(shí)際商業(yè)邏輯的EJB層。層。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院多層結(jié)構(gòu)多層結(jié)構(gòu)數(shù) 據(jù) 庫(kù)ClientClientClient數(shù) 據(jù) 庫(kù) 服 務(wù) 器服 務(wù) 器 ( 數(shù) 據(jù) ) 層中 間 層EJB Container向 數(shù)據(jù) 庫(kù) 服 務(wù) 器 請(qǐng) 求Web Container中 間 層客 戶 層Web瀏 覽 器 向 WebContainer請(qǐng) 求EJB Container中 間 層Web Container向EJB Container請(qǐng) 求中 間 層山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院?jiǎn)栴}問(wèn)題分布異構(gòu)環(huán)境中,通常存在:分布異構(gòu)環(huán)境中,通常存在: 多種硬件系統(tǒng)平臺(tái),多種硬件系統(tǒng)

13、平臺(tái), 各種各樣的系統(tǒng)軟件,各種各樣的系統(tǒng)軟件, 多種風(fēng)格各異的用戶界面,多種風(fēng)格各異的用戶界面, 不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。不同的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)連接。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院中間件的理解中間件的理解An extension of the OS which provides a transparent communication layer to the applications(操作系統(tǒng)的擴(kuò)展操作系統(tǒng)的擴(kuò)展-透透明的通訊明的通訊)The glue which connects objects which are distributed acro

14、ss multiple heterogeneous computer systems(膠水膠水-連接(管理)連接(管理)組件組件)位于操作系統(tǒng)和應(yīng)用軟件之間的一個(gè)軟件層,向各種應(yīng)用軟位于操作系統(tǒng)和應(yīng)用軟件之間的一個(gè)軟件層,向各種應(yīng)用軟件提供件提供服務(wù),使不同的應(yīng)用進(jìn)程能在屏蔽掉平臺(tái)差異的情況,使不同的應(yīng)用進(jìn)程能在屏蔽掉平臺(tái)差異的情況下,通過(guò)網(wǎng)絡(luò)互通信息。下,通過(guò)網(wǎng)絡(luò)互通信息。發(fā)展:通訊發(fā)展:通訊-服務(wù)服務(wù)-領(lǐng)域解決方案領(lǐng)域解決方案山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院定義定義中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件 它使用系統(tǒng)軟

15、件所提供的基礎(chǔ)服務(wù)(功能),銜接網(wǎng)絡(luò)上應(yīng)用它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(wù)(功能),銜接網(wǎng)絡(luò)上應(yīng)用系統(tǒng)的各個(gè)部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享系統(tǒng)的各個(gè)部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享的目的的目的山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院中間件的特性中間件的特性易用性易用性位置透明性:應(yīng)用不必知道對(duì)方網(wǎng)絡(luò)和應(yīng)用的地址;不經(jīng)重位置透明性:應(yīng)用不必知道對(duì)方網(wǎng)絡(luò)和應(yīng)用的地址;不經(jīng)重新編譯,就可把一個(gè)應(yīng)用從一臺(tái)機(jī)器上轉(zhuǎn)移到另一臺(tái)機(jī)器新編譯,就可把一個(gè)應(yīng)用從一臺(tái)機(jī)器上轉(zhuǎn)移到另一臺(tái)機(jī)器消息傳輸?shù)耐暾裕合⒉粦?yīng)丟失或重復(fù)消息傳輸?shù)耐暾裕合⒉粦?yīng)丟失或重復(fù)消息格式的完整性:消息格式不應(yīng)被破壞消息格式

16、的完整性:消息格式不應(yīng)被破壞語(yǔ)言透明性:使用中間件的程序應(yīng)能與另一個(gè)用不同語(yǔ)言編語(yǔ)言透明性:使用中間件的程序應(yīng)能與另一個(gè)用不同語(yǔ)言編寫的程序通信;如果用不同語(yǔ)言重寫一個(gè)程序,其他程序應(yīng)寫的程序通信;如果用不同語(yǔ)言重寫一個(gè)程序,其他程序應(yīng)不受影響不受影響山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院中間件分類中間件分類遠(yuǎn)程過(guò)程中間件遠(yuǎn)程過(guò)程中間件:Remote Procedure Call, RPC消息中間件消息中間件:Message-Oriented Middleware(MOM)面向?qū)ο笾虚g件面向?qū)ο笾虚g件:Object-Oriented Middleware事務(wù)處理中間件(事務(wù)處理中間件(TP Monito

17、r)數(shù)據(jù)庫(kù)中間件數(shù)據(jù)庫(kù)中間件 其他分類:如安全中間件、網(wǎng)絡(luò)中間件、防病毒中間件等其他分類:如安全中間件、網(wǎng)絡(luò)中間件、防病毒中間件等山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院遠(yuǎn)程過(guò)程調(diào)用中間件遠(yuǎn)程過(guò)程調(diào)用中間件在傳統(tǒng)的編程概念中,過(guò)程是由程序員在本地編譯完成,并在傳統(tǒng)的編程概念中,過(guò)程是由程序員在本地編譯完成,并只能局限在本地運(yùn)行的一段代碼,也就是說(shuō)主程序和過(guò)程之只能局限在本地運(yùn)行的一段代碼,也就是說(shuō)主程序和過(guò)程之間的運(yùn)行關(guān)系是本地調(diào)用關(guān)系。間的運(yùn)行關(guān)系是本地調(diào)用關(guān)系。這種結(jié)構(gòu)在網(wǎng)絡(luò)日益發(fā)展的今天已無(wú)法適應(yīng)實(shí)際需求。其調(diào)這種結(jié)構(gòu)在網(wǎng)絡(luò)日益發(fā)展的今天已無(wú)法適應(yīng)實(shí)際需求。其調(diào)用模式無(wú)法充分利用網(wǎng)絡(luò)上其他主機(jī)的資源

18、(如計(jì)算資源、用模式無(wú)法充分利用網(wǎng)絡(luò)上其他主機(jī)的資源(如計(jì)算資源、存儲(chǔ)資源、數(shù)據(jù)資源、顯示資源等),也無(wú)法提高代碼在實(shí)存儲(chǔ)資源、數(shù)據(jù)資源、顯示資源等),也無(wú)法提高代碼在實(shí)體間的共享程度,使得主機(jī)資源大量浪費(fèi)。體間的共享程度,使得主機(jī)資源大量浪費(fèi)。本地過(guò)程調(diào)用的擴(kuò)展,可透明地調(diào)用遠(yuǎn)地提供的服務(wù)本地過(guò)程調(diào)用的擴(kuò)展,可透明地調(diào)用遠(yuǎn)地提供的服務(wù)數(shù)據(jù)表示、可靠傳遞、服務(wù)定位等數(shù)據(jù)表示、可靠傳遞、服務(wù)定位等分布式計(jì)算環(huán)境,分布式計(jì)算環(huán)境,DCEDCEMs RPCMs RPC山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院消息中間件(消息中間件(1)動(dòng)機(jī):動(dòng)機(jī):RPCRPC調(diào)用的缺點(diǎn)調(diào)用的缺點(diǎn) (1 1)客戶端與服務(wù)器端需要同

19、時(shí)在線;)客戶端與服務(wù)器端需要同時(shí)在線; (2 2)客戶端需要知道服務(wù)器端的調(diào)用接口,若調(diào)用接口發(fā)生改變,客戶端需)客戶端需要知道服務(wù)器端的調(diào)用接口,若調(diào)用接口發(fā)生改變,客戶端需要做相應(yīng)變化,如通過(guò)要做相應(yīng)變化,如通過(guò)ODBCODBC連接訪問(wèn)數(shù)據(jù)庫(kù),客戶端需要知道遠(yuǎn)程數(shù)據(jù)庫(kù)的連接訪問(wèn)數(shù)據(jù)庫(kù),客戶端需要知道遠(yuǎn)程數(shù)據(jù)庫(kù)的類型,若類型發(fā)生改變,還需要重新裝載相應(yīng)的驅(qū)動(dòng)程序。類型,若類型發(fā)生改變,還需要重新裝載相應(yīng)的驅(qū)動(dòng)程序。(3 3)操作過(guò)程中需要一直保持與服務(wù)器端的連接,直到操作結(jié)束。因而,)操作過(guò)程中需要一直保持與服務(wù)器端的連接,直到操作結(jié)束。因而, (a a)一旦連接中斷,就意味著操作失敗或數(shù)

20、據(jù)丟失;)一旦連接中斷,就意味著操作失敗或數(shù)據(jù)丟失; (b b)通常判斷連接中斷的時(shí)間較長(zhǎng),若信道的可靠性較差,容易造成連)通常判斷連接中斷的時(shí)間較長(zhǎng),若信道的可靠性較差,容易造成連接中斷,那么應(yīng)用效率將嚴(yán)重低下;接中斷,那么應(yīng)用效率將嚴(yán)重低下; (c c)服務(wù)器端在執(zhí)行操作的過(guò)程中,并不涉及網(wǎng)上數(shù)據(jù)傳輸,但連接的)服務(wù)器端在執(zhí)行操作的過(guò)程中,并不涉及網(wǎng)上數(shù)據(jù)傳輸,但連接的保持占用信道,容易造成網(wǎng)絡(luò)堵塞。保持占用信道,容易造成網(wǎng)絡(luò)堵塞。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院消息中間件(消息中間件(2)這個(gè)問(wèn)題可用消息中間件來(lái)解決,應(yīng)用間通過(guò)傳遞消息來(lái)進(jìn)行協(xié)作,是一種異步這個(gè)問(wèn)題可用消息中間件來(lái)解決,應(yīng)用

21、間通過(guò)傳遞消息來(lái)進(jìn)行協(xié)作,是一種異步通信模式通信模式主要功能是在不同的網(wǎng)絡(luò)協(xié)議、不同的操作系統(tǒng)和不同的應(yīng)用程序之間提供可靠主要功能是在不同的網(wǎng)絡(luò)協(xié)議、不同的操作系統(tǒng)和不同的應(yīng)用程序之間提供可靠的和可恢復(fù)的(若發(fā)生意外)消息傳送。的和可恢復(fù)的(若發(fā)生意外)消息傳送。工作原理:工作原理: 應(yīng)用之間以一系列消息的方式進(jìn)行通信。應(yīng)用之間以一系列消息的方式進(jìn)行通信。 在消息傳遞過(guò)程中,為了避免消息被丟失,消息被保存在消息隊(duì)列中。在消息傳遞過(guò)程中,為了避免消息被丟失,消息被保存在消息隊(duì)列中。 應(yīng)用把消息發(fā)送到與接收者有關(guān)的隊(duì)列中。消息傳遞機(jī)制保證將消息傳送到目的地且應(yīng)用把消息發(fā)送到與接收者有關(guān)的隊(duì)列中。消

22、息傳遞機(jī)制保證將消息傳送到目的地且只傳送一次。只傳送一次。 在消息傳遞過(guò)程中,應(yīng)用之間不必建立聯(lián)系,發(fā)送者僅需將消息放入到與接收者有關(guān)在消息傳遞過(guò)程中,應(yīng)用之間不必建立聯(lián)系,發(fā)送者僅需將消息放入到與接收者有關(guān)的隊(duì)列中,而不必關(guān)心接收者是否在線。的隊(duì)列中,而不必關(guān)心接收者是否在線。 接收者僅需從自己的隊(duì)列中提取消息即可。接收者僅需從自己的隊(duì)列中提取消息即可。IBM的的MQSeries、Microsoft的的MSMQ、東方通的、東方通的TongLink/Q、BEA的的MessageQ山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院事務(wù)處理中間件事務(wù)處理中間件也稱為交易中間件也稱為交易中間件常見功能常見功能 全局事務(wù)協(xié)

23、調(diào)全局事務(wù)協(xié)調(diào) 事務(wù)的分布式兩階段提交事務(wù)的分布式兩階段提交 資源管理器支持資源管理器支持 故障恢復(fù)故障恢復(fù) 負(fù)載平衡負(fù)載平衡產(chǎn)品:產(chǎn)品:Bea的的Tuxedo等等山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院數(shù)據(jù)庫(kù)中間件數(shù)據(jù)庫(kù)中間件實(shí)現(xiàn)對(duì)來(lái)自不同廠家的數(shù)據(jù)庫(kù)的訪問(wèn)實(shí)現(xiàn)對(duì)來(lái)自不同廠家的數(shù)據(jù)庫(kù)的訪問(wèn)屏蔽操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)庫(kù)平臺(tái)等的差異屏蔽操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議、數(shù)據(jù)庫(kù)平臺(tái)等的差異應(yīng)用最廣泛、最成熟應(yīng)用最廣泛、最成熟l(1)通用網(wǎng)關(guān)接口CGI(駐留在WebServer上)l(2)專用API:DLL形式l NSAPI(Netscape)l ISAPI(Microsoft)l(3)通用數(shù)據(jù)庫(kù)接口l JDBC(SUN)

24、l ODBC(Microsoft)(4)數(shù)據(jù)庫(kù)引擎 Borland公司開發(fā),類似于ODBC,支持與數(shù)據(jù)庫(kù)的直接連接,效率較ODBC高(5)數(shù)據(jù)庫(kù)網(wǎng)關(guān) 用于分布式應(yīng)用環(huán)境,無(wú)需在客戶機(jī)進(jìn)行各種配置,如安裝各種ODBC驅(qū)動(dòng)、設(shè)置ODBC 數(shù)據(jù)源等,使用網(wǎng)關(guān)來(lái)統(tǒng)一管理不同數(shù)據(jù)庫(kù)的訪問(wèn) 相關(guān)產(chǎn)品:EDA/SQL、RDA、DRDA山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院對(duì)象在分布式環(huán)境中的表現(xiàn)對(duì)象在分布式環(huán)境中的表現(xiàn)傳統(tǒng)對(duì)象的關(guān)注點(diǎn):封裝和通過(guò)繼承對(duì)實(shí)現(xiàn)進(jìn)行重用。傳統(tǒng)對(duì)象的關(guān)注點(diǎn):封裝和通過(guò)繼承對(duì)實(shí)現(xiàn)進(jìn)行重用。 封裝提供了一種將對(duì)象實(shí)現(xiàn)細(xì)節(jié)與其他對(duì)象屏蔽開的嚴(yán)格方法,可以封裝提供了一種將對(duì)象實(shí)現(xiàn)細(xì)節(jié)與其他對(duì)象屏蔽開

25、的嚴(yán)格方法,可以大大緩解在面向過(guò)程系統(tǒng)中較突出的維護(hù)問(wèn)題。大大緩解在面向過(guò)程系統(tǒng)中較突出的維護(hù)問(wèn)題。 繼承提供了一種重用對(duì)象實(shí)現(xiàn)的簡(jiǎn)便方法繼承提供了一種重用對(duì)象實(shí)現(xiàn)的簡(jiǎn)便方法分布式環(huán)境要求更好的可插入性:分布式環(huán)境要求更好的可插入性: 不太關(guān)注于直接重用代碼,而是要求能夠利用遠(yuǎn)程所實(shí)現(xiàn)的服務(wù)。不太關(guān)注于直接重用代碼,而是要求能夠利用遠(yuǎn)程所實(shí)現(xiàn)的服務(wù)。 要求另一層次上的封裝,只需暴露公用接口要求另一層次上的封裝,只需暴露公用接口對(duì)象對(duì)象組件組件山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院組件的特性(組件的特性(1 of 2)組件是一個(gè)嚴(yán)格定義的可插入單元組件是一個(gè)嚴(yán)格定義的可插入單元 組件一般是基于對(duì)象實(shí)現(xiàn)的,

26、但也可以不作為對(duì)象實(shí)現(xiàn)。組件一般是基于對(duì)象實(shí)現(xiàn)的,但也可以不作為對(duì)象實(shí)現(xiàn)。組件將封裝運(yùn)用到了極限組件將封裝運(yùn)用到了極限 組件通過(guò)封裝來(lái)隱藏組件的實(shí)現(xiàn)以達(dá)到:組件通過(guò)封裝來(lái)隱藏組件的實(shí)現(xiàn)以達(dá)到:組件的實(shí)現(xiàn)語(yǔ)言是未知的:一個(gè)Java客戶不會(huì)感覺到所使用的組件是由C+實(shí)現(xiàn)的。組件的物理位置是未知的:一個(gè)VB客戶不會(huì)感覺到所使用的組件是運(yùn)行在相同的進(jìn)程內(nèi)(使用DLL),還是在同一機(jī)器的不同進(jìn)程內(nèi),甚至是位于不同機(jī)器上。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院組件的特性(組件的特性(2 of 2)組件通常在容器中進(jìn)行管理:組件通常在容器中進(jìn)行管理: 組件遵循所處的容器的規(guī)則,并按照標(biāo)準(zhǔn)的途徑向容器發(fā)送事組件遵循所處

27、的容器的規(guī)則,并按照標(biāo)準(zhǔn)的途徑向容器發(fā)送事件。件。組件可以從容器中獲得屬性或服務(wù):組件可以從容器中獲得屬性或服務(wù): 例如,組件可以使用容器的背景色作為自己的背景色。例如,組件可以使用容器的背景色作為自己的背景色。組件允許對(duì)所支持的接口進(jìn)行動(dòng)態(tài)發(fā)現(xiàn)和調(diào)用:組件允許對(duì)所支持的接口進(jìn)行動(dòng)態(tài)發(fā)現(xiàn)和調(diào)用: 客戶程序可以在運(yùn)行狀態(tài)下確定一個(gè)組件支持何種功能,然后客戶程序可以在運(yùn)行狀態(tài)下確定一個(gè)組件支持何種功能,然后調(diào)用該功能。調(diào)用該功能。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院組件化軟件系統(tǒng)的升級(jí)方式組件化軟件系統(tǒng)的升級(jí)方式組件1組件2組件4組件3組件5組件6軟件系統(tǒng)版本1組件1組件2組件4組件3組件5組件6軟件系統(tǒng)

28、版本1接口保持不變接口保持不變山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院兩點(diǎn)說(shuō)明兩點(diǎn)說(shuō)明組件不必是小的實(shí)體:組件不必是小的實(shí)體: 組件不一定只是小的、可視化的東西,如組件不一定只是小的、可視化的東西,如VB控件面板的控件;控件面板的控件;一個(gè)大規(guī)模的、復(fù)雜組件例子就是一個(gè)大規(guī)模的、復(fù)雜組件例子就是IE內(nèi)使用的內(nèi)使用的HTML查看器。查看器。組件及其容器不一定是可視化的:組件及其容器不一定是可視化的: 組件可能完全不可視(實(shí)際上一個(gè)分布式系統(tǒng)中的大多數(shù)組件組件可能完全不可視(實(shí)際上一個(gè)分布式系統(tǒng)中的大多數(shù)組件都是不可視的)并實(shí)現(xiàn)業(yè)務(wù)邏輯。都是不可視的)并實(shí)現(xiàn)業(yè)務(wù)邏輯。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院服務(wù)的重要性服

29、務(wù)的重要性除了通信協(xié)議外,組件還會(huì)用到一些可能很復(fù)雜,除了通信協(xié)議外,組件還會(huì)用到一些可能很復(fù)雜,但又會(huì)經(jīng)常重復(fù)使用的服務(wù)。但又會(huì)經(jīng)常重復(fù)使用的服務(wù)。 如安全性管理、事務(wù)處理等。如安全性管理、事務(wù)處理等。一個(gè)平臺(tái)或體系結(jié)構(gòu)所顯式提供的服務(wù)越多,開發(fā)一個(gè)平臺(tái)或體系結(jié)構(gòu)所顯式提供的服務(wù)越多,開發(fā)者就越容易在更短的時(shí)間內(nèi)開發(fā)出高質(zhì)量的分布式者就越容易在更短的時(shí)間內(nèi)開發(fā)出高質(zhì)量的分布式系統(tǒng)。系統(tǒng)。 有了平臺(tái)提供的服務(wù),開發(fā)者可以將更多的精力集中于系統(tǒng)的有了平臺(tái)提供的服務(wù),開發(fā)者可以將更多的精力集中于系統(tǒng)的商業(yè)邏輯。商業(yè)邏輯。 EJB是一個(gè)很好的例子是一個(gè)很好的例子山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院常見的服務(wù)

30、常見的服務(wù)命名服務(wù)(命名服務(wù)(Naming) 在分布式系統(tǒng)中,命名服務(wù)提供了一種定位分布式對(duì)象的機(jī)制。在分布式系統(tǒng)中,命名服務(wù)提供了一種定位分布式對(duì)象的機(jī)制。監(jiān)視(監(jiān)視(Monitoring) 監(jiān)視服務(wù)不僅可以監(jiān)視系統(tǒng)的運(yùn)行狀態(tài),而且當(dāng)需要操作人員監(jiān)視服務(wù)不僅可以監(jiān)視系統(tǒng)的運(yùn)行狀態(tài),而且當(dāng)需要操作人員參與時(shí)可以發(fā)出警告信息。參與時(shí)可以發(fā)出警告信息。持久性(持久性(Persistence) 持久性服務(wù)提供一種統(tǒng)一的機(jī)制,使得分布式對(duì)象可以通過(guò)持持久性服務(wù)提供一種統(tǒng)一的機(jī)制,使得分布式對(duì)象可以通過(guò)持久的數(shù)據(jù)存儲(chǔ)來(lái)保存、更新和恢復(fù)他的狀態(tài)。久的數(shù)據(jù)存儲(chǔ)來(lái)保存、更新和恢復(fù)他的狀態(tài)。山東大學(xué)計(jì)算機(jī)科學(xué)與

31、技術(shù)學(xué)院常見的服務(wù)(常見的服務(wù)(cont.)安全性(安全性(Security) 安全性服務(wù)確保于分布式對(duì)象的通信是安全的,并確認(rèn)相應(yīng)的安全性服務(wù)確保于分布式對(duì)象的通信是安全的,并確認(rèn)相應(yīng)的用戶具有適當(dāng)?shù)臋?quán)限。用戶具有適當(dāng)?shù)臋?quán)限。事務(wù)(事務(wù)(Transaction) 事務(wù)服務(wù)能夠確保一個(gè)事務(wù)或者完全完成,或者完全放棄。在事務(wù)服務(wù)能夠確保一個(gè)事務(wù)或者完全完成,或者完全放棄。在企業(yè)系統(tǒng)中,事務(wù)定義了工作的原子級(jí)(企業(yè)系統(tǒng)中,事務(wù)定義了工作的原子級(jí)(atomic)單元。分布)單元。分布式事務(wù)處理就是一個(gè)跨越多臺(tái)計(jì)算機(jī)的單個(gè)工作單元。式事務(wù)處理就是一個(gè)跨越多臺(tái)計(jì)算機(jī)的單個(gè)工作單元。消息處理(消息處理(M

32、essaging) 消息處理服務(wù)提供異步編程模式。異步模式在很多應(yīng)用中都需消息處理服務(wù)提供異步編程模式。異步模式在很多應(yīng)用中都需要。要。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院常見的服務(wù)(常見的服務(wù)(cont.)分布式垃圾回收(分布式垃圾回收(Distributed garbage collection) 當(dāng)一個(gè)程序不再使用分布式對(duì)象時(shí),分布式垃圾回收服務(wù)會(huì)自當(dāng)一個(gè)程序不再使用分布式對(duì)象時(shí),分布式垃圾回收服務(wù)會(huì)自動(dòng)釋放分布式對(duì)象所占用的存儲(chǔ)單元。動(dòng)釋放分布式對(duì)象所占用的存儲(chǔ)單元。資源管理(資源管理(Resource Management) 一般來(lái)說(shuō),資源管理器按照使可伸縮性最大化的方式來(lái)管理分一般來(lái)說(shuō),資

33、源管理器按照使可伸縮性最大化的方式來(lái)管理分布式對(duì)象,即支持大量的客戶程序同分布式對(duì)象在短時(shí)間內(nèi)進(jìn)布式對(duì)象,即支持大量的客戶程序同分布式對(duì)象在短時(shí)間內(nèi)進(jìn)行交互的能力。行交互的能力。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院通信通信客戶程序與服務(wù)程序之間客戶程序與服務(wù)程序之間通信方式通信方式 Socket RPC RMI抽象層次更高山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院SocketSocket: 面對(duì)TCP/IP協(xié)議編程,普遍采用Socket(套接字)規(guī)范,即UNIX習(xí)慣的TCP/IP基本編程方法,由一組圍繞Socket概念的函數(shù)調(diào)用支持,已經(jīng)成為TCP/IP應(yīng)用的標(biāo)準(zhǔn)手段。 RPC: RPC是一種邏輯上的協(xié)議,它可以使

34、用Socket、Named和Pipe等更低級(jí)的協(xié)議完成通信任務(wù)。RPC是在socket的基礎(chǔ)上實(shí)現(xiàn)的,RPC比socket需要更多的條件假定,更多的系統(tǒng)資源。 RPC方法的基本原則是以模塊調(diào)用的簡(jiǎn)單概念忽略通訊細(xì)節(jié),讓程序員不用關(guān)心C/S之間的通訊協(xié)議,集中精力對(duì)付實(shí)現(xiàn)過(guò)程。對(duì)于需要廣泛應(yīng)用和兼容的C/S應(yīng)用,由于其應(yīng)用平臺(tái)的多樣性和復(fù)雜性,可能在某些環(huán)境下不能提供對(duì)RPC編程方法的支持,這時(shí)必須知道通訊包的細(xì)節(jié),用RPC獲得簡(jiǎn)單性的前提已經(jīng)被大大削弱。 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院客戶基于服務(wù)器之間使用的大部分通訊組件都是基于客戶基于服務(wù)器之間使用的大部分通訊組件都是基于socket接口來(lái)實(shí)

35、現(xiàn)的。接口來(lái)實(shí)現(xiàn)的。 Socket是兩個(gè)程序之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點(diǎn),是兩個(gè)程序之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)通訊端點(diǎn),有一個(gè)地址和一個(gè)端口號(hào)來(lái)標(biāo)識(shí)。有一個(gè)地址和一個(gè)端口號(hào)來(lái)標(biāo)識(shí)。 每個(gè)服務(wù)程序在提供服務(wù)時(shí)都要在一個(gè)端口進(jìn)行,而想使每個(gè)服務(wù)程序在提供服務(wù)時(shí)都要在一個(gè)端口進(jìn)行,而想使用該服務(wù)的客戶機(jī)也必須連接該端口。用該服務(wù)的客戶機(jī)也必須連接該端口。 因?yàn)槭腔趥鬏攲?,所以它是比較原始的通訊協(xié)議機(jī)制。因?yàn)槭腔趥鬏攲?,所以它是比較原始的通訊協(xié)議機(jī)制。 通過(guò)通過(guò)Socket的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方的數(shù)據(jù)表現(xiàn)形式為字節(jié)流信息,因此通訊雙方要想完成某項(xiàng)具體的應(yīng)用則必須按雙方約定的

36、方式進(jìn)行數(shù)要想完成某項(xiàng)具體的應(yīng)用則必須按雙方約定的方式進(jìn)行數(shù)據(jù)的格式化和解釋據(jù)的格式化和解釋 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院import .*; import java.io.*; public class SocketCommunicationServer public static void main(String args) try boolean flag=true;/設(shè)置標(biāo)志位為真 Socket client=null;/創(chuàng)建Socket client以接收來(lái)自客戶端的請(qǐng)求 String inputLine; /*1 首先調(diào)用Se

37、rverSocket類以某個(gè)端口號(hào)為參數(shù),創(chuàng)建一個(gè)ServerSocket對(duì)象,即是服務(wù)器端的服務(wù)程序在該指定端口監(jiān)聽的Socket。*/ServerSocket serverSocket =new ServerSocket (9000);/以端口9000創(chuàng)建一個(gè)服務(wù)器Socket System.out.println(服務(wù)器在端口9000上監(jiān)聽);/*2 服務(wù)器端程序使用ServerSocket對(duì)象的accept()方法,接收來(lái)自客戶機(jī)程序的連接請(qǐng)求,此時(shí)服務(wù)器端將一直保持停滯狀態(tài),直到收到客戶端發(fā)來(lái)的連接請(qǐng)求,此時(shí)該方法將返回一個(gè)新建的Socket類的實(shí)例,代表和客戶機(jī)建立的通訊鏈路在服務(wù)

38、程序內(nèi)的通訊端點(diǎn)。如果采用Java的多線程編程方法,可以實(shí)現(xiàn)并發(fā)服務(wù)器,繼續(xù)監(jiān)聽來(lái)自其他客戶的連接請(qǐng)求。*/while(flag) client=serverSocket.accept();山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院/*3 使用新建的Socket對(duì)象創(chuàng)建輸入、輸出流對(duì)象。*/DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream(); PrintStream output=new PrintStream(new BufferedOutputStream(client.get

39、OutputStream(); /*4 使用流對(duì)象的方法完成和客戶端的數(shù)據(jù)傳輸,按約定協(xié)議識(shí)別并處理來(lái)自客戶端的請(qǐng)求數(shù)據(jù),并把處理的結(jié)果返回給客戶端。*/while ( inputLine= input.readLine()!=null) if(inputLine.equals(Stop) flag=false; break; output.println(inputLine); output.flush(); /*5 客戶端工作完畢后,則服務(wù)器端程序關(guān)閉和客戶端通訊的流和通訊的Socket。*/output.close(); input.close(); client.close(); /*

40、6 在服務(wù)器程序運(yùn)行結(jié)束之間,應(yīng)當(dāng)關(guān)閉用來(lái)監(jiān)聽的Socket.*/serverSocket.close(); catch(IOException e) 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院import java.io.*;import .*;public class SocketCommunicationClientpublic static void main(String args)try/*1首先調(diào)用Socket類的構(gòu)造函數(shù),以服務(wù)器的指定的IP地址或指定的主機(jī)名和指定的端口號(hào)為參數(shù),創(chuàng)建一個(gè)Socket流,在創(chuàng)建Socket流的過(guò)程中包含了向服務(wù)器請(qǐng)求建立通訊連接的過(guò)程實(shí)現(xiàn)。*/Socket

41、clientSocket =new Socket (mice,9000);/創(chuàng)建一個(gè)流Socket并與主機(jī)mice上的端口9000相連接/*2使用Socket的方法getInputStream()和getOutputStream()來(lái)創(chuàng)建輸入/輸出流。這樣,使用Socket類后,網(wǎng)絡(luò)輸入輸出也轉(zhuǎn)化為使用流對(duì)象的過(guò)程。*/OutputStream output =clientSocket.getOutputStream();/向此Socket寫入字節(jié)的一個(gè)輸出流DataInputStream input=new DataInputStream(clientSocket.getInputStrea

42、m();int c;山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院/*3使用輸入輸出流對(duì)象的相應(yīng)方法讀寫字節(jié)流數(shù)據(jù),因?yàn)榱鬟B接著通訊所用的Socket,Socket又是和服務(wù)器端建立連接的一個(gè)端點(diǎn),因此數(shù)據(jù)將通過(guò)連接從服務(wù)器得到或發(fā)向服務(wù)器。這時(shí)我們就可以對(duì)字節(jié)流數(shù)據(jù)按客戶端和服務(wù)器之間的協(xié)議進(jìn)行處理,完成雙方的通訊任務(wù)。*/String response;while ( c= System.in.read()!=-1)/從屏幕上接受輸入的字符串,并且分解成一個(gè)個(gè)字符output.write(byte)c);if(c=n)/如果字符為回車,則輸出字符串緩沖output.flush();response=inpu

43、t.readLine();System.out.println(Communication:+response);/*待通訊任務(wù)完畢后,我們用流對(duì)象的close()方法來(lái)關(guān)閉用于網(wǎng)絡(luò)通訊的輸入輸出流,在用Socket對(duì)象的close()方法來(lái)關(guān)閉Socket。*/output.close();input.close();clientSocket.close(); catch (Exception e)System.err.println(Exception :+e);山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI在在java分布式對(duì)象模型中,遠(yuǎn)程對(duì)象是指它的方法可以從另分布式對(duì)象模型中,遠(yuǎn)程對(duì)象是指它的方

44、法可以從另外一個(gè)位于不同主機(jī)上的外一個(gè)位于不同主機(jī)上的java虛擬機(jī)來(lái)調(diào)用的對(duì)象。該對(duì)象虛擬機(jī)來(lái)調(diào)用的對(duì)象。該對(duì)象采用一個(gè)或多個(gè)遠(yuǎn)程接口進(jìn)行描述,這些接口聲明了遠(yuǎn)程對(duì)采用一個(gè)或多個(gè)遠(yuǎn)程接口進(jìn)行描述,這些接口聲明了遠(yuǎn)程對(duì)象的方法。象的方法。RMI(遠(yuǎn)程方法調(diào)用遠(yuǎn)程方法調(diào)用)就是對(duì)一個(gè)遠(yuǎn)程對(duì)象的遠(yuǎn)程就是對(duì)一個(gè)遠(yuǎn)程對(duì)象的遠(yuǎn)程接口中的方法進(jìn)行調(diào)用接口中的方法進(jìn)行調(diào)用RMI的目的是要使運(yùn)行在不同的計(jì)算機(jī)中的對(duì)象之間的調(diào)用的目的是要使運(yùn)行在不同的計(jì)算機(jī)中的對(duì)象之間的調(diào)用表現(xiàn)得象本地調(diào)用一樣表現(xiàn)得象本地調(diào)用一樣RMI應(yīng)用程序包括兩個(gè)獨(dú)立程序:應(yīng)用程序包括兩個(gè)獨(dú)立程序:server 和和client程序。程序

45、。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院l 存在于客戶端存在于客戶端l 遠(yuǎn)程對(duì)象的本地映象:調(diào)用遠(yuǎn)程對(duì)象時(shí),實(shí)際調(diào)用的是存根遠(yuǎn)程對(duì)象的本地映象:調(diào)用遠(yuǎn)程對(duì)象時(shí),實(shí)際調(diào)用的是存根對(duì)象上的方法對(duì)象上的方法l 負(fù)責(zé)負(fù)責(zé)初始化并與遠(yuǎn)程對(duì)象所在的遠(yuǎn)程VM連接將參數(shù)打包,傳遞到遠(yuǎn)程VM等待方法調(diào)用的結(jié)果解包返回值和異常將值返回給調(diào)用者存根存根(stub)山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院框架框架存在于服務(wù)器存在于服務(wù)器接收客戶存根的請(qǐng)求接收客戶存根的請(qǐng)求和真正的遠(yuǎn)程對(duì)象進(jìn)行交互和真正的遠(yuǎn)程對(duì)象進(jìn)行交互傳送服務(wù)器響應(yīng)到客戶傳送服務(wù)器響應(yīng)到客戶負(fù)責(zé)負(fù)責(zé) 解包客戶端輸入的遠(yuǎn)程方法的參數(shù)解包客戶

46、端輸入的遠(yuǎn)程方法的參數(shù) 調(diào)用實(shí)際的遠(yuǎn)程對(duì)象的方法調(diào)用實(shí)際的遠(yuǎn)程對(duì)象的方法 將結(jié)果打包返回給調(diào)用者將結(jié)果打包返回給調(diào)用者 傳至遠(yuǎn)程引用層傳至遠(yuǎn)程引用層山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院遠(yuǎn)程引用層和傳輸層遠(yuǎn)程引用層和傳輸層遠(yuǎn)程引用層負(fù)責(zé)為獨(dú)立于遠(yuǎn)程引用層負(fù)責(zé)為獨(dú)立于stub/skeleton的多種形式的的多種形式的遠(yuǎn)程引用和調(diào)用協(xié)議提供支持遠(yuǎn)程引用和調(diào)用協(xié)議提供支持傳輸層負(fù)責(zé)在不同的地址空間內(nèi)傳輸序列化的字節(jié)傳輸層負(fù)責(zé)在不同的地址空間內(nèi)傳輸序列化的字節(jié)流,使用流,使用TCP/UDP傳輸傳輸山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI registry簡(jiǎn)單的命名和查找遠(yuǎn)程對(duì)象的服務(wù)簡(jiǎn)單的命名和查找遠(yuǎn)程對(duì)象的服務(wù)遠(yuǎn)程

47、對(duì)象在服務(wù)器端注冊(cè)遠(yuǎn)程對(duì)象在服務(wù)器端注冊(cè)客戶能夠發(fā)現(xiàn)遠(yuǎn)程對(duì)象和找到遠(yuǎn)程對(duì)象引用客戶能夠發(fā)現(xiàn)遠(yuǎn)程對(duì)象和找到遠(yuǎn)程對(duì)象引用山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI 系統(tǒng)體系結(jié)構(gòu)系統(tǒng)體系結(jié)構(gòu)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI 流程流程(1)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeleton

48、Registry Virtual Machine“Fred” Server121. Server Creates Remote Object2. Server Registers Remote Object山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI 流程流程(2)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server43. Client requests object from Registry4. Registry returns

49、remote reference(and stub gets created)3山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院RMI 流程流程(3)Client Virtual MachineClientServer Virtual MachineStubRemote ObjectSkeletonRegistry Virtual Machine“Fred” Server65. Client invokes stub method6. Stub talks to skeleton7. Skeleton invokes remote object method57山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院基于基于RMI的程序組成

50、的程序組成遠(yuǎn)程對(duì)象接口遠(yuǎn)程對(duì)象接口遠(yuǎn)程對(duì)象實(shí)現(xiàn)遠(yuǎn)程對(duì)象實(shí)現(xiàn)服務(wù)程序服務(wù)程序客戶程序客戶程序接口和類接口和類山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院一個(gè)簡(jiǎn)單的一個(gè)簡(jiǎn)單的RMI例子例子1.遠(yuǎn)程對(duì)象的本地接口聲明(遠(yuǎn)程對(duì)象的本地接口聲明(RMIOperate.java) 該類僅僅是一個(gè)接口聲明,RMI客戶機(jī)可以直接使用它,RMI服務(wù)器必須通過(guò)一個(gè)遠(yuǎn)程對(duì)象來(lái)實(shí)現(xiàn)它,并用某個(gè)專有的URL注冊(cè)它的一個(gè)實(shí)例。 遠(yuǎn)程接口擴(kuò)展 java.rmi.Remote 接口。 除了所有應(yīng)用程序特定的例外之外,每個(gè)方法還必須在 throws 子句中聲明 java.rmi.RemoteException(或 RemoteExceptio

51、n 的父類)。Hello.javaimport java.rmi.*; / RMI本地接口必須從本地接口必須從Remote接口派生接口派生 public interface Hello extends Remote / 接口中的具體方法聲明,注意必須聲明拋出接口中的具體方法聲明,注意必須聲明拋出RemoteException String sayHello(String name) throws RemoteException; 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院2、遠(yuǎn)程對(duì)象實(shí)現(xiàn)類 這個(gè)類應(yīng)實(shí)現(xiàn)這個(gè)類應(yīng)實(shí)現(xiàn)RMI客戶機(jī)調(diào)用的遠(yuǎn)程服務(wù)對(duì)象的本地接口,客戶機(jī)調(diào)用的遠(yuǎn)程服務(wù)對(duì)象的本地接口,它必須從它必須從

52、UnicastRemoteObject或或PortableRemoteObject繼承,繼承,構(gòu)造函數(shù)應(yīng)拋出構(gòu)造函數(shù)應(yīng)拋出RemoteException異常。異常。 HelloImpl.javaimport java.rmi.*; import javax.rmi.PortableRemoteObject; public class HelloImpl extends PortableRemoteObject implements Hello /* 構(gòu)造函數(shù)構(gòu)造函數(shù) */ public HelloImpl() throws RemoteException super(); /* 實(shí)現(xiàn)本地接口中

53、聲明的實(shí)現(xiàn)本地接口中聲明的sayHello()方法方法 */ public String sayHello(String message) throws RemoteException System.out.println(我在我在RMI的服務(wù)器端,客戶端正在調(diào)用的服務(wù)器端,客戶端正在調(diào)用sayHello方法。方法。 ); System.out.println(Hello + message); return message; 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院3.RMI服務(wù)器類該類創(chuàng)建遠(yuǎn)程對(duì)象實(shí)現(xiàn)類該類創(chuàng)建遠(yuǎn)程對(duì)象實(shí)現(xiàn)類HelloImpl的一個(gè)實(shí)例,然的一個(gè)實(shí)例,然后通過(guò)一個(gè)專有的后通過(guò)一個(gè)專有的

54、URL來(lái)注冊(cè)它。所謂注冊(cè)就是通來(lái)注冊(cè)它。所謂注冊(cè)就是通過(guò)過(guò)Java.rmi.Naming.bind ()方法或方法或Java.rmi.Naming.rebind()方法,將方法,將HelloImpl實(shí)例綁實(shí)例綁定到指定的定到指定的URL上。上。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院HelloServer.javaimport java.rmi.*;public class HelloServer public static void main(String args) try System.out.println(開始 RMI Server .); /* 創(chuàng)建遠(yuǎn)程對(duì)象的實(shí)現(xiàn)實(shí)例 */ HelloImpl

55、 hImpl = new HelloImpl(); System.out.println(將實(shí)例注冊(cè)到專有的URL ); Naming.rebind(HelloService, hImpl); System.out.println(等待RMI客戶端調(diào)用.); System.out.println(); catch (Exception e) System.out.println(錯(cuò)誤: + e); 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院請(qǐng)注意有關(guān)請(qǐng)注意有關(guān) rebind 方法調(diào)用的下列參數(shù):方法調(diào)用的下列參數(shù): 第一個(gè)參數(shù)是第一個(gè)參數(shù)是 URL 格式的格式的 java.lang.String,表示遠(yuǎn)程對(duì)

56、象,表示遠(yuǎn)程對(duì)象的位置和名字。的位置和名字。 如果如果 URL 中省略主機(jī),則主機(jī)缺省值為當(dāng)前主機(jī),而且在中省略主機(jī),則主機(jī)缺省值為當(dāng)前主機(jī),而且在 URL 中無(wú)中無(wú)需指定協(xié)議(例如需指定協(xié)議(例如“HelloServer”)。)。 在在 URL 中,可以選擇提供端口號(hào):例如中,可以選擇提供端口號(hào):例如“/myhost:1234/HelloServer”。端口缺省值為。端口缺省值為 1099。除非服務(wù)器在缺。除非服務(wù)器在缺省省 1099 端口上創(chuàng)建注冊(cè)服務(wù)程序,否則需要指定端口號(hào)。端口上創(chuàng)建注冊(cè)服務(wù)程序,否則需要指定端口號(hào)。 第二個(gè)參數(shù)為從中調(diào)用遠(yuǎn)程方法的對(duì)象實(shí)現(xiàn)引用。第二個(gè)參數(shù)為從中調(diào)用遠(yuǎn)程方法的對(duì)象實(shí)現(xiàn)引用。山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 RMI客戶使用客戶使用java.rmi.Naming.lookup()方法,在指定的遠(yuǎn)程方法,在指定的遠(yuǎn)程主機(jī)上查找主機(jī)上查找RMI服務(wù)對(duì)象,若找到就把它轉(zhuǎn)換成本地接口服務(wù)對(duì)象,若找到就把它轉(zhuǎn)換成本地接口 RMIOperate類型。它必須知道提供類型。它必須知道提供RMI服務(wù)主機(jī)的服務(wù)主機(jī)的URL,這個(gè)這個(gè)URL可以通過(guò)可以通過(guò)rmi: /host/path或或rmi:/host:port/pa

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論