• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Proxy模式的遠(yuǎn)程處理框架研究

      2013-04-14 01:25:20武夷學(xué)院數(shù)學(xué)與計(jì)算機(jī)系福建武夷山354300
      關(guān)鍵詞:調(diào)用代理信道

      (武夷學(xué)院數(shù)學(xué)與計(jì)算機(jī)系,福建 武夷山354300)

      在分布式應(yīng)用系統(tǒng)開發(fā)中,基于面向服務(wù)體系架構(gòu)(Service-Oriented Architecture,SOA)的軟件架構(gòu)已經(jīng)成為主流。JavaRMI、EJB、CORBA(Common Object Request Broker Architecture,公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))和Microsoft的 WCF(Windows Communication Foundation,視窗通信基礎(chǔ))、.NET Remoting、Web Service等都可以用于SOA系統(tǒng)的開發(fā)[1-5]。以上技術(shù)作為成熟的機(jī)制,經(jīng)過(guò)層層包裝,隱藏了技術(shù)細(xì)節(jié),在方便開發(fā)人員使用的同時(shí),也存在一個(gè)問題:開發(fā)人員知道如何使用框架進(jìn)行開發(fā),但無(wú)法理解框架原理及底層運(yùn)作細(xì)節(jié),對(duì)于一些特殊的編程需求,難以對(duì)框架進(jìn)行有效擴(kuò)展。為此,筆者提出了一種基于Proxy模式的遠(yuǎn)程處理框架,其在局域網(wǎng)的應(yīng)用中編程模型簡(jiǎn)單,框架原理易于理解,且能夠?qū)崿F(xiàn)高速有效的遠(yuǎn)程方法調(diào)用。

      1 Proxy模式

      Proxy模式有助于跨越障礙進(jìn)行數(shù)據(jù)訪問[6]。Proxy模式的意圖是為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問[7]。其適用場(chǎng)合之一就是遠(yuǎn)程代理(Remote Proxy)模式。遠(yuǎn)程代理為一個(gè)對(duì)象在不同的地址空間提供局部代表,隱藏了一個(gè)對(duì)象存在于不同地址空間的事實(shí)。Proxy模式的結(jié)構(gòu)如圖1所示,其參與者中,Proxy對(duì)象保存一個(gè)引用使得代理可以訪問實(shí)體RealSubject對(duì)象。若為遠(yuǎn)程代理,則Proxy對(duì)象負(fù)責(zé)對(duì)請(qǐng)求及其參數(shù)進(jìn)行編碼,并向不同地址空間中的實(shí)體發(fā)送已編碼的請(qǐng)求。

      圖1 Proxy模式結(jié)構(gòu)

      2 遠(yuǎn)程處理框架

      遠(yuǎn)程處理框架從功能上應(yīng)當(dāng)使跨應(yīng)用程序邊界(可以跨應(yīng)用程序域、跨進(jìn)程、跨機(jī)器乃至跨網(wǎng)絡(luò))的應(yīng)用程序之間能夠進(jìn)行通信。為便于敘述,將參與通信的應(yīng)用程序區(qū)分為客戶端和服務(wù)器端。通過(guò)遠(yuǎn)程處理框架,客戶端能夠以與調(diào)用本地方法相同的方式調(diào)用服務(wù)器端的遠(yuǎn)程服務(wù)對(duì)象的方法。筆者提出的遠(yuǎn)程處理框架包含代理和遠(yuǎn)程處理2個(gè)組件,其結(jié)構(gòu)如圖2所示。

      圖2 基于Proxy模式的遠(yuǎn)程處理框架

      通過(guò)使用代理組件,客戶端獲得TransparentProxy(透明代理),TransparentProxy調(diào)用RealProxy(真實(shí)代理)的Invoke方法,所以,重寫Invoke方法是創(chuàng)建代理對(duì)象的關(guān)鍵。Invoke方法應(yīng)當(dāng)包括:向服務(wù)器發(fā)出鏈接請(qǐng)求;將調(diào)用請(qǐng)求封裝成消息,向服務(wù)器發(fā)送該消息;等待并接收返回消息;將消息返回代理對(duì)象。因透明代理與遠(yuǎn)程服務(wù)對(duì)象類型一致,故客戶端調(diào)用代理上的方法與調(diào)用遠(yuǎn)程服務(wù)對(duì)象的方法相同。

      現(xiàn)有的各類遠(yuǎn)程處理框架中,服務(wù)器一般充當(dāng)宿主,即只發(fā)布遠(yuǎn)程服務(wù)對(duì)象,其余的工作都由遠(yuǎn)程處理框架完成??蚣苤械倪h(yuǎn)程處理組件遵循此原則,其功能包括監(jiān)聽客戶端鏈接請(qǐng)求、根據(jù)客戶端的調(diào)用請(qǐng)求調(diào)用服務(wù)對(duì)象的方法、將方法調(diào)用的結(jié)果發(fā)送回客戶端的代理對(duì)象等。

      3 遠(yuǎn)程處理框架的實(shí)現(xiàn)

      筆者所提出的遠(yuǎn)程處理框架采用Remote Proxy模式,由代理組件和遠(yuǎn)程處理組件構(gòu)成。代理組件ProxyClass從抽象類RealProxy派生,其通過(guò)持有遠(yuǎn)程服務(wù)接口IServerClass可在客戶端中以本地化的方式調(diào)用遠(yuǎn)程服務(wù)對(duì)象的相關(guān)方法;遠(yuǎn)程處理組件發(fā)布遠(yuǎn)程服務(wù)對(duì)象,并通過(guò)Socket監(jiān)聽來(lái)自客戶端的鏈接請(qǐng)求,根據(jù)請(qǐng)求內(nèi)容進(jìn)行方法調(diào)用并返回處理結(jié)果。

      3.1 Remote Proxy模式結(jié)構(gòu)

      Remote Proxy模式與傳統(tǒng)Proxy模式最大的區(qū)別在于代理類ProxyClass沒有實(shí)現(xiàn)公共接口IServerClass,而是派生于RealProxy類(見圖3)。RealProxy是.NET框架提供的用于實(shí)現(xiàn)代理功能的抽象類,其包括抽象方法Invoke,Invoke方法定義如下:

      public abstract IMessage Invoke(IMessage msg);

      其中,類型為IMessage的參數(shù)msg包含了有關(guān)方法調(diào)用的信息:對(duì)象標(biāo)識(shí)、方法名和參數(shù)列表等。RealProxy通過(guò)Invoke方法持有遠(yuǎn)程服務(wù)接口的信息。ProxyClass因派生于RealProxy而獲得了遠(yuǎn)程服務(wù)接口,并通過(guò)Invoke方法實(shí)現(xiàn)了Remote Proxy模式的意圖:對(duì)方法調(diào)用請(qǐng)求信息進(jìn)行編碼,并向不同地址空間中的實(shí)體發(fā)送已編碼的請(qǐng)求[6]。

      圖4 遠(yuǎn)程處理框架通信流程

      3.2 代理組件設(shè)計(jì)

      代理組件是遠(yuǎn)程處理框架中應(yīng)用于客戶端的重要組件,客戶端通過(guò)代理組件實(shí)現(xiàn)方法調(diào)用消息的封裝、傳輸,并接收遠(yuǎn)程服務(wù)對(duì)象調(diào)用結(jié)果的返回消息(見圖4)。

      創(chuàng)建任何代理類都必須繼承于抽象類RealProxy[7]。為了獲取遠(yuǎn)程對(duì)象的透明代理,可通過(guò)調(diào)用代理類的GetTransparentProxy方法。用透明代理對(duì)象調(diào)用遠(yuǎn)程對(duì)象的方法時(shí),將自動(dòng)調(diào)用被重寫過(guò)的Invoke方法。重寫Invoke方法的主要步驟如下:①生成遠(yuǎn)程對(duì)象方法的調(diào)用消息。以下代碼中,RemoteMethodInfo類是自定義的,用于表示遠(yuǎn)程對(duì)象方法的調(diào)用消息:

      ②將調(diào)用消息序列化到內(nèi)存流。這里需要用到MemoryStream類,該類定義的流對(duì)象可以將對(duì)象狀態(tài)序列化到內(nèi)存中。③與發(fā)布遠(yuǎn)程對(duì)象的服務(wù)器建立鏈接。用TcpClient類的構(gòu)造函數(shù)進(jìn)行到服務(wù)器的鏈接,此處需提供主機(jī)名和端口號(hào)。④將步驟②處理結(jié)果發(fā)送到服務(wù)器。TcpClient類的GetStream方法返回一個(gè)NetworkSteam類對(duì)象,該對(duì)象用于對(duì)Internet中的數(shù)據(jù)進(jìn)行發(fā)送或接收。⑤等待服務(wù)器響應(yīng)。DataAvailable屬性用于確定是否可以讀取數(shù)據(jù),如果可以在NetworkSteam上讀取數(shù)據(jù),則為true,否則為false。⑥從服務(wù)器接收數(shù)據(jù)。當(dāng)服務(wù)器將調(diào)用結(jié)果返回時(shí),將流上的數(shù)據(jù)讀取到字節(jié)數(shù)組_buffer中,并用其構(gòu)建內(nèi)存流對(duì)象,最后將接收到的數(shù)據(jù)反序列化以重構(gòu)對(duì)象。⑦根據(jù)調(diào)用結(jié)果構(gòu)造返回消息。構(gòu)造返回消息就是創(chuàng)建ReturnMessage對(duì)象,該對(duì)象將被RealProxy類的其他方法解包裝,獲得真正的調(diào)用結(jié)果。

      3.3 遠(yuǎn)程處理組件設(shè)計(jì)

      遠(yuǎn)程處理組件是遠(yuǎn)程處理框架的核心,服務(wù)器端使用遠(yuǎn)程處理組件注冊(cè)信道,發(fā)布遠(yuǎn)程服務(wù)對(duì)象,并處理來(lái)自客戶端的調(diào)用請(qǐng)求[8]。遠(yuǎn)程處理組件結(jié)構(gòu)如圖5所示,其中RegisterChannel方法實(shí)現(xiàn)信道注冊(cè)功能,Register RemoteObject方法實(shí)現(xiàn)遠(yuǎn)程服務(wù)對(duì)象注冊(cè)功能,StartServers方法對(duì)每個(gè)注冊(cè)信道啟動(dòng)一個(gè)線程進(jìn)行處理,ChanelProc方法具體負(fù)責(zé)與客戶端的通信,MyChannel和MyRemoteObj是自定義類,分別代表信道對(duì)象和遠(yuǎn)程服務(wù)對(duì)象。

      圖5 遠(yuǎn)程服務(wù)組件結(jié)構(gòu)

      1)信道注冊(cè)功能 服務(wù)器注冊(cè)信道時(shí),為每個(gè)信道命名。信道注冊(cè)方法中,首先檢測(cè)信道名稱,若信道名稱不存在,則創(chuàng)建信道并分配端口號(hào),將該信道添加到已注冊(cè)的信道集合中。

      2)遠(yuǎn)程服務(wù)對(duì)象注冊(cè)功能 服務(wù)器注冊(cè)遠(yuǎn)程對(duì)象時(shí),為每個(gè)遠(yuǎn)程對(duì)象指定一個(gè)URI。遠(yuǎn)程對(duì)象注冊(cè)方法中,首先檢測(cè)該URI是否已存在,若該URI不存在,則注冊(cè)該遠(yuǎn)程對(duì)象并將其添加到已注冊(cè)的遠(yuǎn)程對(duì)象集合中。

      3)啟動(dòng)注冊(cè)信道 對(duì)于每一個(gè)已注冊(cè)的信道啟動(dòng)一個(gè)線程池,利用QueueUserWorkItem方法將信道監(jiān)聽處理方法ChannelProc作為回調(diào)方法排入隊(duì)列等待執(zhí)行,channel對(duì)象作為參數(shù)傳遞給ChannelProc方法。

      4)信道處理方法 信道處理方法首先啟動(dòng)監(jiān)聽。利用Socket對(duì)象接收客戶端連接請(qǐng)求,并通過(guò)序列化和反射機(jī)制,用所接收的數(shù)據(jù)創(chuàng)建遠(yuǎn)程服務(wù)對(duì)象,調(diào)用對(duì)應(yīng)方法,獲取結(jié)果,反序列化后發(fā)送回客戶端[8]。其詳細(xì)步驟如下:①接收用戶請(qǐng)求,AcceptSocket方法用于接收來(lái)自客戶端的連接請(qǐng)求,并返回一個(gè)Socket對(duì)象;②接收并緩存數(shù)據(jù),Receive方法接收客戶端的請(qǐng)求數(shù)據(jù),并將所接收數(shù)據(jù)存入到緩沖區(qū)Buffer中;③將數(shù)據(jù)反序列化為調(diào)用請(qǐng)求對(duì)象;④獲取遠(yuǎn)程服務(wù)對(duì)象標(biāo)識(shí);⑤獲取實(shí)際的遠(yuǎn)程服務(wù)對(duì)象,ActiveObj是MyRemoteObj中定義的只讀屬性,其通過(guò)反射機(jī)制創(chuàng)建了遠(yuǎn)程服務(wù)對(duì)象;⑥調(diào)用遠(yuǎn)程對(duì)象的相應(yīng)方法并獲得結(jié)果;⑦將調(diào)用結(jié)果序列化并發(fā)送到客戶端。

      4 應(yīng) 用

      為驗(yàn)證以上遠(yuǎn)程處理框架的有效性,將框架相關(guān)組件應(yīng)用于高校大學(xué)生素質(zhì)拓展學(xué)分管理系統(tǒng)。部分高校要求學(xué)生需積極參加各類課外活動(dòng)以獲取素質(zhì)拓展學(xué)分,學(xué)分類型分為學(xué)術(shù)活動(dòng)、文體活動(dòng)等6類,規(guī)定每類需修滿1學(xué)分,總分不低于10學(xué)分方可畢業(yè)。一般情況下,每位學(xué)生的學(xué)分驗(yàn)證信息約60~100條,每學(xué)期增加的信息記錄約10萬(wàn)條。系統(tǒng)共有學(xué)生、院系教務(wù)管理人員和校素質(zhì)拓展中心管理人員3類用戶:學(xué)生通過(guò)瀏覽器登錄系統(tǒng),可提交學(xué)分驗(yàn)證信息和查看本人學(xué)分,院系教務(wù)管理人員通過(guò)客戶端登錄遠(yuǎn)程服務(wù)器,審核信息并提交數(shù)據(jù)。系統(tǒng)用C#語(yǔ)言開發(fā),用SQLServer2005作為數(shù)據(jù)庫(kù)服務(wù)器。下面以院系教務(wù)管理人員遠(yuǎn)程登錄為例,相關(guān)組件部署如表1所示。

      表1 遠(yuǎn)程處理框架組件及部署

      4.1 遠(yuǎn)程服務(wù)接口與服務(wù)類

      為便于部署,將服務(wù)接口與服務(wù)類分放在2個(gè)不同的文件中,客戶端只需持有服務(wù)接口即可。這樣設(shè)計(jì)的優(yōu)勢(shì)很明顯,只要接口不變,服務(wù)類的具體實(shí)現(xiàn)的變化就不會(huì)對(duì)客戶端產(chǎn)生影響,保證了客戶端的穩(wěn)定性(IServerClass聲明了服務(wù)接口,ServerClass實(shí)現(xiàn)IServerClass(見圖3))。其中Authentication方法對(duì)教務(wù)管理人員提供的UID和密碼進(jìn)行驗(yàn)證并返回驗(yàn)證結(jié)果。

      4.2 發(fā)布遠(yuǎn)程服務(wù)對(duì)象

      通常,在遠(yuǎn)程處理框架中,服務(wù)器端一般是作為遠(yuǎn)程服務(wù)對(duì)象的宿主程序。服務(wù)器端通過(guò)以下步驟發(fā)布遠(yuǎn)程服務(wù)對(duì)象:使用遠(yuǎn)程處理組件,先注冊(cè)一個(gè)信道,再注冊(cè)一個(gè)遠(yuǎn)程服務(wù)對(duì)象,之后,利用線程池接受客戶端的服務(wù)調(diào)用請(qǐng)求并進(jìn)行處理。代碼如下:

      4.3 客戶端

      客戶端通過(guò)代理組件獲取遠(yuǎn)程服務(wù)對(duì)象的透明代理后,將以使用本地對(duì)象的方式使用遠(yuǎn)程服務(wù)對(duì)象。院系教務(wù)管理人員在進(jìn)行素質(zhì)拓展學(xué)分的管理前需登錄到服務(wù)器進(jìn)行身份驗(yàn)證,方法如下:

      5 結(jié) 語(yǔ)

      研究了一種遠(yuǎn)程處理框架,通過(guò)Remote Proxy模式將框架分解成代理組件和遠(yuǎn)程處理組件,在組件設(shè)計(jì)中,涉及序列化機(jī)制、反射機(jī)制等.NET框架中的重要技術(shù),并基于Socket實(shí)現(xiàn)了遠(yuǎn)程服務(wù)對(duì)象方法調(diào)用信息的網(wǎng)絡(luò)通信過(guò)程。最后,將其應(yīng)用于高校大學(xué)生素質(zhì)拓展學(xué)分管理系統(tǒng),客戶端通過(guò)代理組件能夠以調(diào)用本地對(duì)象成員函數(shù)的方式調(diào)用遠(yuǎn)程服務(wù)對(duì)象的函數(shù)。當(dāng)然,與成熟的分布式系統(tǒng)構(gòu)建技術(shù)相比,筆者所提出的框架還有其不足之處,如發(fā)布對(duì)象的宿主機(jī)制還不夠完善,無(wú)法采用配置文件等。

      [1]李海聞,寧敏,林福良,等 .一種基于CORBA的分布式應(yīng)用模型 [J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(2):33-34.

      [2]劉丹,程曉,侯德林 .一種基于RMI的分布式架構(gòu)設(shè)計(jì) [J].計(jì)算機(jī)應(yīng)用與軟件,2007,24(9):207-208.

      [3]鐘涵,李志蜀,王汾雁,等..NET Remoting和Web Service結(jié)合的分布式應(yīng)用設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)應(yīng)用,2007,27(6):213-214.

      [4]趙慶霞,孫建伶 .基于WCF的服務(wù)緩存設(shè)計(jì)與研究 [J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(14):3151-3152.

      [5]Lowy J.WCF服務(wù)編程 [M].張逸,徐寧 譯 .北京:機(jī)械工業(yè)出版社,2008:14-16.

      [6]Martin R C,Martin M.敏捷軟件開發(fā):原則、模式與實(shí)踐(C#版)[M].鄧輝,孟巖 譯 .北京:人民郵電出版社,2008:377-381.

      [7]Gamma E,Helm R,Johnson R,et al.Design patterns elements of reusable object-oriented software [M].New York:Adison-Wesley,1995:233-234.

      [8]飛思科技產(chǎn)品研發(fā)中心 .精通.NET核心技術(shù)——高級(jí)特性 [M].北京:電子工業(yè)出版社,2002:202-211.

      猜你喜歡
      調(diào)用代理信道
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      代理圣誕老人
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      代理手金寶 生意特別好
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      復(fù)仇代理烏龜君
      基于導(dǎo)頻的OFDM信道估計(jì)技術(shù)
      一種改進(jìn)的基于DFT-MMSE的信道估計(jì)方法
      基于MED信道選擇和虛擬嵌入塊的YASS改進(jìn)算法
      一種基于GPU的數(shù)字信道化處理方法
      兴文县| 达日县| 福鼎市| 洛隆县| 青田县| 沈阳市| 珠海市| 天门市| 大余县| 大方县| 嘉峪关市| 临夏县| 宿州市| 莱州市| 昭通市| 陇川县| 禄劝| 邵武市| 鄄城县| 屯门区| 宣汉县| 临海市| 佛坪县| 昭觉县| 华阴市| 大关县| 凌源市| 彰武县| 和田市| 洮南市| 怀集县| 贵定县| 涟水县| 嫩江县| 洛阳市| SHOW| 盐山县| 蛟河市| 兴安县| 大英县| 锦屏县|