應用DCOM技術(shù)在遠程教育中實現(xiàn)組件化的網(wǎng)絡(luò)虛擬實驗室探討
佚名
摘要:為了使虛擬實驗室適合遠程網(wǎng)絡(luò)教學的需要,使它能夠在網(wǎng)絡(luò)上工作,利用DCOM技術(shù)以C/S方式實現(xiàn)了組件化的虛擬實驗室。將模擬計算部分作為服務(wù)器端,界面輸入/輸出作為客戶端。在多用戶的情況下DCOM沒有提供分布式策略,則利用調(diào)度對象來平衡負載,從而引入分布式處理方式。
關(guān)鍵詞:遠程教育;DCOM;虛擬實驗室;客戶/服務(wù)器(C/S)
Abstract: In order to make the virtual laboratory for teaching the need for long-distance network to enable it to work on the network, the use of DCOM technology to C / S achieved the components of the virtual laboratory. The simulation as part of the server-side, the interface I / O as a client. In many cases, users did not provide DCOM Distributed strategy, the use of targeted scheduling to balance the load, so the introduction of distributed processing way.
Key words: distance education; DCOM; virtual laboratory; client / server (C / S)
前言
隨著Internet的不斷擴大,日益增多的計算機正在連接到互聯(lián)網(wǎng)上,以共享資源。于是遠程教育作為一種新的教育模式被提上了議事日程,現(xiàn)代計算機技術(shù)和網(wǎng)絡(luò)技術(shù)為遠程教育的發(fā)展提供了強有力的技術(shù)保障。尤其是WWW瀏覽器技術(shù)和數(shù)據(jù)庫技術(shù)的發(fā)展,使得教學活動不再受地域和時間上的限制,利用Internet就能進行實時或非實時的教與學,從而實現(xiàn)了跨越時空的學習。然而,大學實驗室里許多實驗課,在遠程教育的網(wǎng)上學習中將會有許多困難。如何在網(wǎng)絡(luò)課件中解決好這個問題,對于進一步辦好遠程教育是具有重要實際意義的。本文利用DCOM(Distributed Component Object Module)技術(shù),將單機板的虛擬電路實驗系統(tǒng)升級為網(wǎng)絡(luò)版的虛擬電路實驗系統(tǒng)。
虛擬電路實驗系統(tǒng)是一個用于仿真電子線路實驗的軟件。用戶通過界面在計算機屏幕上選用各種元器件搭建電路,測試波形,得到實驗數(shù)據(jù)等結(jié)果,以模擬真實實驗的方式使用戶掌握有關(guān)電路方面的知識。從功能上講,虛擬實驗室系統(tǒng)分為兩個模塊:一個是仿真計算部分,它是整個系統(tǒng)的核心部分,負責輸入數(shù)據(jù)的處理、大量的模擬計算,并向輸出界面部分傳送結(jié)果;另一個則包括輸入界面和輸出界面兩部分。輸入部分完成用戶電路搭建時的界面處理,從某種角度來講,它完成了數(shù)據(jù)的采集。同樣,輸出界面完成結(jié)果的輸出,如波形輸出、數(shù)據(jù)輸出等。
為了滿足遠程教學的需要,必須將單機虛擬實驗系統(tǒng)改造為可在網(wǎng)絡(luò)上運行的系統(tǒng)。從通信的開銷上來講,Socket是最合適的。但是Socket本身是面向通信的,有復雜的通信細節(jié)需要處理。而且,Socket服務(wù)器對于客戶來說,很難提供穩(wěn)定的應用程序接口,一旦服務(wù)器發(fā)生了變化,客戶必須相應地變化,不利于客戶和服務(wù)器單獨開發(fā)和維護。另外一種則是文本采用的COM(Component Object Module)技術(shù)。
1 組件對象模型(COM)
現(xiàn)代的軟件開發(fā)都以模塊方式進行。每個模塊均有自己的功能,并與其它模塊以接口進行通信。于是,復雜的軟件系統(tǒng)就可以用搭積木的方式進行。這就是組件軟件的基本思想。COM就是實現(xiàn)軟件組件化的一種努力。
實際上,COM是一種規(guī)定了組件之間的接口標準。COM還引入了面向?qū)ο蟮乃枷耄珻OM對象是一個能完成一定功能的軟件模塊。COM對象是組件的基本構(gòu)成,它以接口的方式向其它對象或軟件提供服務(wù)。通常情況下,對象的服務(wù)與被服務(wù)都是客戶/服務(wù)器的關(guān)系。COM對象不同于C++對象。C++對象是類的實例。C++是面向?qū)ο蟮木幊陶Z言,是人們在源碼級試圖實現(xiàn)軟件模塊化的一種努力。COM對象是二進制的規(guī)范。換言之,C++在源碼級提供了代碼重用的便利,而COM是在二進制級提供了可重用性。COM的二進制級重用是通過COM對象工作來實現(xiàn)的。它主要有兩種方式:(1)包容,一個對象通過利用另一對象的功能實現(xiàn)同樣的接口。(2)聚合,一個對象直接將另一對象的接口提供給客戶。
由于COM的實現(xiàn)是在二進制級,而不是源碼級,于是決定了COM與語言的無關(guān)性。一個用C或C++實現(xiàn)的COM可以與一個用BASIC實現(xiàn)的客戶正常地通信。因此,整個軟件的一部分可以用一種語言開發(fā),而另一部分可以使用其它語言。這給軟件開發(fā)者在根據(jù)性能的要求做出編程語言選擇時提供了方便。COM的另一個特性是進程的透明性。一個組件可以有很多種形式出現(xiàn),比如DLL,EXE等。DLL形式的組件與客戶程序工作在同一進程,EXE組件工作在獨立的進程。無論是進程內(nèi)的組件還是進程外的組件,對于客戶來講都是同樣的,客戶無需關(guān)心進程間的通信。進程間的通信是復雜的,然而COM掩蓋了這種復雜性。
2 分布式組件對象模型(DCOM)
COM給軟件開發(fā)帶來了極大的便利。但是,在網(wǎng)絡(luò)環(huán)境下,單機上的組件重用和進程透明性已不能滿足需要,COM必須擴展。Microsoft的DCOM便是COM在網(wǎng)絡(luò)環(huán)境下的無縫擴展,DCOM能夠支持在局域網(wǎng)、廣域網(wǎng),甚至在Internet上與不同計算機的對象之間的通信。使用DCOM,應用程序可以在位置上達到分布性,從而滿足客戶和應用的需求。
DCOM隱藏了網(wǎng)絡(luò)通信的細節(jié),在可以利用的網(wǎng)絡(luò)協(xié)議的支持下,組件或客戶無需關(guān)心對方組件的位置,便可以進行通信。因此DCOM具有協(xié)議無關(guān)性。在網(wǎng)絡(luò)環(huán)境下,組件之間的通信不像在COM的進程內(nèi)或進程間的LPC(Local Procedure Call),而是以RPC(Remote Procedure Call)來完成的。客戶與COM對象必須通過Proxy和Stub來進行通信。Proxy工作在客戶進程中,Stub工作在服務(wù)器進程中。此外,DCOM提供了所有在網(wǎng)絡(luò)上工作的軟件都應有的特殊性與安全性。
3 COM/DCOM在網(wǎng)絡(luò)虛擬實驗室中的應用
從程序設(shè)計的角度來看,COM/DCOM的結(jié)構(gòu)是這樣的:對象是構(gòu)建組件的基本元素,而服務(wù)器為組件提供進程內(nèi)/外的服務(wù),提供了組件工作的場所。對象是一個自包含的結(jié)構(gòu),提供一定的功能,它不能直接被客戶使用,客戶必須通過接口訪問它。對象必須通過接口來表現(xiàn)自己的功能,甚至對象的創(chuàng)建都不能由客戶直接完成,對象的創(chuàng)建必須借助一個特殊的對象,即類廠來完成。
對于客戶,它可以是一個組件對象也可以是一個支持COM的普通程序。它通過COM API來調(diào)用類廠創(chuàng)建對象,并增加引用計數(shù),來決定對象的生存期。這樣COM庫和COM服務(wù)器會在適當?shù)臅r候卸載。
雖然C++對象和COM對象有本質(zhì)的區(qū)別,但是它們在二進制一級的構(gòu)造上有一定的相似性,C++對象和COM對象都使用VTable。而且,C++的對象描述能力使它很容易創(chuàng)建COM。因此C++是實現(xiàn)COM的最佳選擇。Visual C++在CO
M編程方面提供了兩種方式:一種是MFC(Microsoft Foundation Class);一種是ATL(Active Template Library)。MFC是以嵌套類的方式來實現(xiàn)COM的;ATL大量地使用于模板,采用多重繼承的方式來實現(xiàn)COM。但不管是MFC還是ATL,都為開發(fā)軟件提供了極大的方便,很多的處理都由MFC提供,比如引用計數(shù)、服務(wù)器鎖計數(shù)、類廠等。盡管MFC和ATL都能實現(xiàn)COM,但MFC是一種開發(fā)完全應用程序的有效手段。相比之下,ATL是專為COM設(shè)計的。所以,ATL更適合創(chuàng)建快速小型化的COM組件。
3.1 服務(wù)器
在本文設(shè)計的網(wǎng)絡(luò)虛擬實驗室系統(tǒng)中,將模擬計算部分作為服務(wù)器。對于單用戶服務(wù)器的情況,可以使用STA(Single Thread Apartment)線程模型。在這種情況下,分作為一個COM對象。對于在這個組件來說,它至少應該提供一個Simulator對象、一個Isimulate接口和兩種方法。
interface IDatdT’: IUnknown
{
HRESULT InputData( [ in]... );
HRESULT OutputData( [ out]... );
…
};
這個對象是一個可連接對象。在模擬算法完成之后,它必須向用戶發(fā)出通知。而用戶程序內(nèi)置了一個接收器。客戶使用InputData()向服務(wù)器傳送采集的數(shù)據(jù),服務(wù)器在處理數(shù)據(jù)完成之后,客戶通過OutputData()取得處理結(jié)果。
對于多用戶服務(wù)器,實際上只要簡單地在這個COM組件中加入注冊表信息,或者用CoCreatelnst9nEX(),以主機信息為參數(shù)就可以在指定主機上創(chuàng)建對象,利用DCOM進行通信。位置透明性使客戶很容易使用DCOM。如果為客戶指定相應的主機(即服務(wù)器),客戶就可以創(chuàng)建并使用對象。
3.2 多用戶服務(wù)器的負載平衡
在多用戶的情況下,當用戶的數(shù)量達到一定程度的時候,多個用戶在主機上創(chuàng)建的對象實例會使服務(wù)器的壓力增大,從而造成服務(wù)器性能的下降,影響服務(wù)質(zhì)量。當然,可以使用多個服務(wù)器來提供服務(wù),人工地平衡多個服務(wù)器上的負載,但這將給維護帶來極大的困難。一旦用戶群動態(tài)地變化,服務(wù)器的負載平衡將被打破。顯然,這種沒有任何分布式策略的分布式COM(DCOM)是不夠的。雖然DCOM提供了位置透明性,但是沒有提供分布式的策略,分布式策略需要軟件開發(fā)者來提供。因此,提供負載平衡是DCOM組件開發(fā)的一個重要任務(wù)。為了平衡多個服務(wù)器的負載,建立了如下圖所示的系統(tǒng)結(jié)構(gòu)。
對于模擬計算的COM對象,為了避免多次重復地創(chuàng)建和釋放,本文采用了服務(wù)對象。服務(wù)對象是已創(chuàng)建的COM對象實例。該系統(tǒng)中還引入了簡單的調(diào)度對象。調(diào)度對象是一個中間對象,它以STA(單線程Apartment)方式工作。調(diào)度對象負責建立服務(wù)對象Simulator,維護主機列表COSERVERINFO Server[N]、對象列表ISimulate*pISimulate[N]和對象狀態(tài)列表Int State[N]。主機列表保存主機名字,對象列表存放對象接口指針,狀態(tài)列表是一個對象的狀態(tài)值。對于對象來講,它有三種狀態(tài):(1)未創(chuàng)建或創(chuàng)建失敗;(2)忙;(3)閑。三個列表都以全局變量的形式出現(xiàn)。由于使用了STA,可以不必考慮對象的同步問題。但是,多個同類對象訪問全局變量仍然可能造成對象在線程上的安全問題。因此,本文使用臨界區(qū)(Critical Section)來同步。此外,調(diào)度對象是一個可連接對象,它必須與服務(wù)對象通信并獲得服務(wù)對象的狀態(tài)。
調(diào)度對象負責在主機列表指定的主機上創(chuàng)建服務(wù)對象,并初始化。所有的客戶在需要服務(wù)的時候應向調(diào)度對象發(fā)出請求。當有客戶向調(diào)度對象請求服務(wù)時,調(diào)度對象檢索主機列表、對象列表和狀態(tài)列表,在選定主機上查詢并檢查對象的有效性,獲取服務(wù)對象接口指針,并返回給客戶,然后客戶與服務(wù)對象通信。根據(jù)COM的特性,此時客戶和服務(wù)對象之間的通信是直接進行的,不經(jīng)過調(diào)度對象。調(diào)度對象根據(jù)什么原則來獲取某個主機上的對象是一個策略上的問題,實際應用中必須考慮主機的負載平衡。對于復雜的系統(tǒng),這種策略可能相當?shù)膹碗s。然而,為了簡單起見,本文采用了以執(zhí)行任務(wù)的對象在主機上的數(shù)量多少作為平衡負載的標準。在客戶使用完畢對象后,對象激發(fā)一個調(diào)度對象事件,調(diào)度對象負責將對象狀態(tài)復位。因此,調(diào)度對象是一個可連接對象,實現(xiàn)了一個接收器,接收來自服務(wù)對象的事件。
此外,調(diào)度對象還負責將服務(wù)對象卸載。應該看到調(diào)度對象的引入增加了網(wǎng)絡(luò)通信量,但對于采用分布式策略的系統(tǒng)來說是必要的。實際上調(diào)度對象很大程度上起到了目錄服務(wù)的作用。如果必要的話,調(diào)度對象加上適當?shù)哪K可以作為一個簡單的中間管理模塊,比如控制用戶登錄、限制用戶數(shù)量等。
3.3 客戶
客戶控制著虛擬實驗室數(shù)據(jù)的采集和輸出表現(xiàn),它將直接面對用戶。對于客戶來講,它只需要在數(shù)據(jù)處理的時候,在執(zhí)行調(diào)度的主機上創(chuàng)建調(diào)度對象,本文來自范文中國網(wǎng)www.fw789.com。調(diào)度對象負責返回可用的服務(wù)對象。客戶將數(shù)據(jù)交給服務(wù)對象來處理,并取得輸出值。在客戶與服務(wù)對象通信的過程中,客戶還必須接收來自服務(wù)對象激發(fā)的事件,所以客戶必須內(nèi)置接收器。
4 結(jié)束語
本文使用了調(diào)度對象來實現(xiàn)負載的平衡,采用的平衡策略是以運行在主機上的對象數(shù)目作為衡量負載的標準,這對于簡單的系統(tǒng)已經(jīng)足夠了,但對于比較復雜的系統(tǒng),必須有更復雜的負載平衡策略。
DCOM雖然提供了很多的優(yōu)點,如位置透明性、協(xié)議無關(guān)性等,然而這是以增加開銷為代價的。與Socket比較,DCOM的開銷要大一些,但是DCOM提供的方便超出了它帶來的額外開銷。
參考文獻:
[1]潘愛民 COM原理與應用[M].北京,清華大學出版社。1999。
[2]劉紹光,徐凱聲.三層C/S結(jié)構(gòu)機理及微軟的解決方案—Windows DNA。
交通與計算機,2000-(2)