專利名稱:可重構(gòu)軟件中基于代理的組件生成方法
技術(shù)領(lǐng)域:
可重構(gòu)軟件中基于代理的組件生成方法,屬于可重構(gòu)網(wǎng)絡(luò)研究領(lǐng)域。
背景技術(shù):
面向服務(wù)提供的新型網(wǎng)絡(luò)技術(shù)體系是未來(lái)互聯(lián)網(wǎng)發(fā)展的可行思路,實(shí)現(xiàn)面向服務(wù)
提供的新型網(wǎng)絡(luò)技術(shù)體系的關(guān)鍵是研究開(kāi)放式可重構(gòu)路由交換節(jié)點(diǎn)的技術(shù)。 可重構(gòu)路由交換開(kāi)發(fā)環(huán)境的體系結(jié)構(gòu)如圖1所示。其中定義處理的三個(gè)等級(jí)——
平臺(tái)、組件和構(gòu)件,平臺(tái)是可重構(gòu)完成多種任務(wù)的系統(tǒng),組件是可重構(gòu)實(shí)現(xiàn)特定功能的單
元,構(gòu)件是可重構(gòu)實(shí)施給定處理的模塊。 本文提出基于代理的組件生成方法是應(yīng)用于路由器軟件的,主要是為了解決路由 器的軟件可剪裁與可重用的問(wèn)題,其主要流程如圖2所示。由于當(dāng)前的路由器廠家的路由 器產(chǎn)品都是分系列的,高端路由器使用的是高成本的高端硬件,性能好,處理能力強(qiáng);低端 路由器反之。這樣就使得高端路由器能夠有能力運(yùn)行功能完善但復(fù)雜度稍高的軟件版本, 但低端路由器就只能運(yùn)行功能相對(duì)較少同時(shí)復(fù)雜度低的軟件。但是,路由器開(kāi)發(fā)者針對(duì)不 同的路由器硬件平臺(tái)重新開(kāi)發(fā)不同的路由器軟件會(huì)耗費(fèi)大量的人力物力。因此迫切的需要 有一種方法能夠使得軟件的耦合度低,剪裁性好,代碼的重用度高。本發(fā)明提出的基于代理 的組件生成方法就可以達(dá)到本目的。生成的組件可參考圖5。 本發(fā)明以已授權(quán)專利"可重構(gòu)路由器軟件中路由協(xié)議構(gòu)件生成方法"為基礎(chǔ),"可 重構(gòu)路由器軟件中路由協(xié)議構(gòu)件生成方法"中已經(jīng)詳細(xì)描述了如何用路由器中各個(gè)模塊生 成相應(yīng)的構(gòu)件。
發(fā)明內(nèi)容
本發(fā)明的目的在于 提出基于代理的組件生成方法,主要是為了解決路由器軟件可剪裁與可重用的問(wèn)
題,減少大量重復(fù)代碼的編寫工作。 本發(fā)明的特征在于 所述方法是一種路由轉(zhuǎn)發(fā)組件生成方法,是在可重構(gòu)路由交換平臺(tái)中依照以下步 驟實(shí)現(xiàn)的 步驟(1):初始化可重構(gòu)路由交換平臺(tái) 設(shè)定操作系統(tǒng)支持TCP/IP協(xié)議,支持套接字Socket通信方式,所述套接字包括 網(wǎng)關(guān)的IP地址和端口號(hào), 定義構(gòu)件,是實(shí)施給定處理的模塊,用于處理特定類型的消息,設(shè)有一個(gè)輸入端 口,接受若干類型的消息,設(shè)有若干輸出端口,每個(gè)輸出端口只輸出一類設(shè)定類型的消息, 所述消息用XML語(yǔ)言描述,至少包括包括構(gòu)件名稱和版本號(hào)在內(nèi)的基本信息,輸出端口和 輸入端口, 組件,由構(gòu)件連接而成,是能實(shí)現(xiàn)特定功能的單元,其中
5
構(gòu)件之間交互的消息的格式,至少包括消息ID來(lái)唯一識(shí)別消息的類型,發(fā)送者
標(biāo)識(shí),接收者標(biāo)識(shí)和消息長(zhǎng)度,所述消息類型分為預(yù)留消息和用戶自定義消息,預(yù)留消息
是根據(jù)路由器領(lǐng)域特性預(yù)先定義的一系列消息,其中包含了路由器控制層構(gòu)件之間的交互
消息和路由協(xié)議構(gòu)件向路由管理構(gòu)件發(fā)送的添加路由消息、構(gòu)件注冊(cè)注銷消息在內(nèi)的一部
分公用的消息;用戶自定義消息是用戶根據(jù)消息格式要求新創(chuàng)建的消息類型, 構(gòu)件之間的交互過(guò)程是一個(gè)"發(fā)送消息_接收消息_執(zhí)行操作"的過(guò)程, 構(gòu)件之間的連接關(guān)系用XML語(yǔ)言描述,至少包括源構(gòu)件,源構(gòu)件輸出端口號(hào),目
標(biāo)構(gòu)件, 設(shè)定構(gòu)件交互管理模塊和構(gòu)件間通信模塊,所述構(gòu)件交互管理模塊,用Agent表
示,用于管理構(gòu)件連接拓?fù)浣Y(jié)構(gòu)、接收構(gòu)件注冊(cè)和注銷、轉(zhuǎn)發(fā)構(gòu)件信息、監(jiān)視構(gòu)件運(yùn)行狀態(tài)、
向構(gòu)件發(fā)送控制消息以及維護(hù)構(gòu)件連接動(dòng)態(tài)變化,以實(shí)現(xiàn)構(gòu)件之間的交互和構(gòu)件的組裝管
理;所述構(gòu)件間通信模塊,用AgentClient表示,設(shè)有地址映射表,以便于為構(gòu)件找到對(duì)應(yīng)
的目的構(gòu)件的通信地址,還設(shè)有監(jiān)聽(tīng)Socket端口 ; 步驟(2):依次按以下步驟生成組件 步驟(2. 1):構(gòu)件交互管理模塊初始化,步驟如下 步驟(2. 1. 1):從外部讀取XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu),形成構(gòu)件連接拓?fù)?結(jié)構(gòu)數(shù)據(jù)庫(kù),并保存, 步驟(2. 1. 2):初始化套接字Socket :
步驟(2. 1. 2. 1):開(kāi)啟套接字Socket服務(wù),
步驟(2. 1. 2. 2):創(chuàng)建監(jiān)聽(tīng)Socket描述符, 步驟(2. 1. 2. 3):綁定本地地址和端口號(hào)到所述監(jiān)聽(tīng)套接字Socket,并顯示,
步驟(2. 2):對(duì)用戶需要的構(gòu)件進(jìn)行初始化 步驟(2. 2. 1):獲取構(gòu)件定義信息基本信息、輸出端口號(hào)和輸入端口號(hào), 步驟(2. 2. 2):初始化所述用戶需要的構(gòu)件的監(jiān)聽(tīng)套接字Socket,并綁定本地IP
地址和socket端口 , 步驟(2. 3):構(gòu)件注冊(cè) 步驟(2. 3. 1):所述構(gòu)件間通信模塊Agent Client獲取所述構(gòu)件自身所在機(jī)器的 IP地址和套接字socket監(jiān)聽(tīng)端口號(hào),據(jù)此構(gòu)造注冊(cè)消息,將構(gòu)件ID、自身IP地址和監(jiān)聽(tīng)端 口號(hào)寫入消息字符串, 步驟(2. 3. 2):把所述注冊(cè)信息發(fā)送給所述構(gòu)件交互管理模塊Agent, 步驟(2. 3. 3):所述構(gòu)件交互管理模塊檢查構(gòu)件的"可接收消息類型"是否與連接
拓?fù)浣Y(jié)構(gòu)中的連接有沖突,若有則拒絕注冊(cè),若無(wú)沖突,可執(zhí)行步驟(2. 3. 4), 步驟(2. 3. 4):所述構(gòu)件交互管理模塊所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要
向步驟(2.3)中新注冊(cè)的構(gòu)件發(fā)送消息的構(gòu)件,向每一個(gè)找到的構(gòu)件轉(zhuǎn)發(fā)新注冊(cè)構(gòu)件的信
息,其中包含通信地址信息, 步驟(2. 3. 5):所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需 要接收所述新注冊(cè)構(gòu)件消息的構(gòu)件,對(duì)于每一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則將它的通 信地址信息發(fā)送給新注冊(cè)構(gòu)件, 步驟(2. 3. 6):所述構(gòu)件交互管理模塊向所述新注冊(cè)的構(gòu)件發(fā)送注冊(cè)反饋信息,其中包含了多個(gè)與所述新注冊(cè)構(gòu)件相連的構(gòu)件的詳細(xì)信息ID號(hào)、IP地址、套接字Socket端口號(hào)、所述新注冊(cè)構(gòu)件與之連接的輸出端口號(hào)以及輸入端口號(hào), 步驟(2. 3. 7):所述新注冊(cè)構(gòu)件收到注冊(cè)反饋信息后,對(duì)每個(gè)與之連接的構(gòu)件的詳細(xì)信息,所述構(gòu)件間通信模塊Agent Client做如下處理讀取輸出端口號(hào),找到相應(yīng)的輸出端口的地址映射表項(xiàng),將遠(yuǎn)端構(gòu)件的ID、 Socket地址等信息添加到該地址映射表項(xiàng)中, 步驟(2. 3. 8):所述構(gòu)件交互管理模塊更新已注冊(cè)構(gòu)件數(shù)據(jù)庫(kù)。
構(gòu)件間按以下步驟進(jìn)行通信 步驟(2-1):發(fā)送消息發(fā)送構(gòu)件指定一個(gè)輸出端口,所述構(gòu)件間通信模塊根據(jù)所
述地址映射表,向與所述的指定端口相連的目的構(gòu)件的輸入端口都發(fā)送一個(gè)消息, 步驟(2-2):接收消息所述構(gòu)件間的通信模塊通過(guò)套接字socket端口監(jiān)聽(tīng)連接
請(qǐng)求,如有連接請(qǐng)求則接收連接并接收消息,將接收到的消息放在消息隊(duì)列中,以便構(gòu)件處理。 按以下步驟維護(hù)構(gòu)件 步驟(3-1):在每個(gè)定時(shí)周期內(nèi),所述構(gòu)件交互管理模塊向已經(jīng)注冊(cè)的構(gòu)件發(fā)送心跳信號(hào), 步驟(3-2):若超時(shí)未能收到回復(fù)信號(hào),則發(fā)送一個(gè)注銷命令給所述沒(méi)有回復(fù)的構(gòu)件,再按步驟(4-1)到步驟(4-6)所述的構(gòu)件注銷處理。
按以下步驟注銷構(gòu)件 步驟(4-1):構(gòu)件向所述構(gòu)件交互管理模塊發(fā)送注銷信息, 步驟(4-2):所述構(gòu)件交互管理模塊檢查步驟(4-1)中的構(gòu)件是否已注冊(cè),若沒(méi)有注冊(cè),則不作處理,若已注冊(cè),則進(jìn)行步驟(4-3), 步驟(4-3):所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要向所述注銷構(gòu)件發(fā)送消息的構(gòu)件,對(duì)于每一個(gè)找到已注冊(cè)構(gòu)件轉(zhuǎn)發(fā)步驟(4-1)所述的請(qǐng)求注銷構(gòu)件的注冊(cè)信息, 步驟(4-4):所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要接收所述注銷構(gòu)件消息的構(gòu)件,對(duì)于每一個(gè)找到已注冊(cè)構(gòu)件轉(zhuǎn)發(fā)步驟(4-1)所述的請(qǐng)求注銷構(gòu)件的注冊(cè)信息, 步驟(4-5):在步驟(4-3)或步驟(4_4)中所述的收到了注銷信息的構(gòu)件中進(jìn)行如下處理讀取所述注銷信息中構(gòu)件的輸出端口號(hào),找到相應(yīng)的輸出端口的地址映射表,遍歷所述地址映射表,根據(jù)所述請(qǐng)求注銷構(gòu)件ID號(hào),刪除其相關(guān)地址節(jié)點(diǎn),
步驟(4-6):所述構(gòu)件交互管理模塊更新所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)。
按以下步驟添加構(gòu)件 步驟(5-1):在所述XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu)配置文件中增加命令指定
添加的新構(gòu)件及其連接關(guān)系, 步驟(5-2):新構(gòu)件啟動(dòng)運(yùn)行, 步驟(5-3):所述構(gòu)件交互管理模塊接收新構(gòu)件注冊(cè),按照步驟(2. 3)所述的注冊(cè)流程處理。 按以下步驟刪除構(gòu)件
7
步驟(6-1):所述構(gòu)件交互管理模塊在接受刪除命令后,向要?jiǎng)h除的構(gòu)件發(fā)送注銷消息, 步驟(6-2):所述構(gòu)件交互管理模塊接收構(gòu)件注銷請(qǐng)求,按照步驟(4-1) 步驟(4. 6)所述的注銷流程處理, 步驟(6-3):更新XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu),去掉所有與刪除了的構(gòu)件的
相關(guān)信息。 本發(fā)明的優(yōu)點(diǎn)在于 此專利在由構(gòu)件生成組件的過(guò)程中,具有耦合程度低,集成性好,代碼重用度高的優(yōu)點(diǎn)。開(kāi)發(fā)組件的周期比較短。
圖1是可重構(gòu)路由交換開(kāi)發(fā)環(huán)境的體系結(jié)構(gòu)。 圖2是可重構(gòu)軟件中基于代理的組件生成方法的主要流程。 圖3是構(gòu)件示意圖。 圖4是構(gòu)件描述。 圖5是組件示意圖。 圖6是構(gòu)件連接模型。 圖7是構(gòu)件雙向交互過(guò)程。 圖8是構(gòu)件的一對(duì)多和多對(duì)一連接。 圖9是組件中構(gòu)件連接關(guān)系描述。
具體實(shí)施例方式
基于構(gòu)件交互的組件生成方法,在可重構(gòu)軟件開(kāi)發(fā)環(huán)境下,依據(jù)以下步驟實(shí)現(xiàn)
步驟(1):組件的描述; 基于構(gòu)件的組件生成,需要對(duì)組件中的構(gòu)件,組件的環(huán)境,組件中的構(gòu)件之間的接口 ,組件中的構(gòu)件之間的交互過(guò)程,組件中構(gòu)件的連接關(guān)系進(jìn)行描述。
步驟(1. 1):構(gòu)件的描述; 路由器軟件構(gòu)件是一個(gè)可以獨(dú)立地部署的功能單元,其模型如圖3所示。構(gòu)件通過(guò)接口向外提供服務(wù),在運(yùn)行時(shí)具體表現(xiàn)為一個(gè)進(jìn)程(單線程進(jìn)程)。構(gòu)件是一個(gè)消息處理模塊,能處理特定類型的消息,通過(guò)接口與外界交互,接口包括一個(gè)輸入端口 ,若干個(gè)輸出端口 。輸入端口可接收若干種類型的消息,就是構(gòu)件能夠處理的消息,每個(gè)輸出端口只可以輸出一種特定類型的消息。構(gòu)件之間交互采用基于消息驅(qū)動(dòng)的異步方式,服務(wù)請(qǐng)求者構(gòu)件只管發(fā)送消息,服務(wù)提供者構(gòu)件接收并處理消息,構(gòu)件不提供基于函數(shù)調(diào)用的接口 。
構(gòu)件定義的描述使用XML語(yǔ)言,如圖4所示,描述的內(nèi)容包括必要描述、可選描述等,一般包括以下方面 基本信息描述(名稱、版本號(hào)等)
出端口描述
進(jìn)端口描述 步驟(1. 2):組件環(huán)境的描述;
此處環(huán)境指組件所處的大的軟件環(huán)境。 本專利提出的基于構(gòu)件交互的組件生成方法,要求操作系統(tǒng)支持TCP/IP協(xié)議,支 持套接字socket通信方式。
步驟(1. 3):組件中的構(gòu)件之間的接口的描述; 組件中的構(gòu)件接口描述需要描述所構(gòu)造的組件內(nèi)部所包含的構(gòu)件間的接口。以便 構(gòu)件靈活組成組件,實(shí)現(xiàn)構(gòu)件的可替換與可重構(gòu)。 構(gòu)件之間交互的信息為消息,消息由消息頭部和消息體構(gòu)成。消息頭部具有統(tǒng)一 格式,主要包含消息的類型、發(fā)送者標(biāo)識(shí)、接收者標(biāo)識(shí)和消息長(zhǎng)度等;消息體攜帶具體的參 數(shù),參數(shù)的個(gè)數(shù)可變,消息體長(zhǎng)度可變。消息的類型以消息ID來(lái)唯一識(shí)別,其類型分為兩大 類預(yù)留的消息和用戶自定義的消息。預(yù)留的消息是根據(jù)路由器領(lǐng)域特性預(yù)先定義的一系 列消息,這些消息包含了大部分常見(jiàn)的路由器控制層構(gòu)件之間的交互消息和一些公用的消 息,比如路由協(xié)議構(gòu)件向路由管理構(gòu)件發(fā)送的添加路由消息、構(gòu)件注冊(cè)注銷消息等;用戶自 定義消息是用戶根據(jù)消息格式要求新創(chuàng)建的消息類型。 構(gòu)件之間的連接依賴于消息,只有端口互相兼容的兩個(gè)構(gòu)件才能連接,也就是只 要服務(wù)請(qǐng)求者構(gòu)件的輸出端口的消息能被服務(wù)提供者構(gòu)件的輸入端口接收,則兩者能夠連 接。構(gòu)件之間是基于消息流的單向連接。如圖6,構(gòu)件1的輸出端口 1和2能輸出的消息 類型分別是MSG_TYPE_X和MSG_TYPE_Y,而構(gòu)件2輸入端口能接收處理的消息類型是MSG_ TYPE_X和MSG_TYPE_Z。因此它們之間只有構(gòu)件1輸出端口 1到構(gòu)件2的連接是合法的。
步驟(1. 4):組件中的構(gòu)件之間的交互過(guò)程的描述; 如圖7所示,構(gòu)件間的交互過(guò)程是一個(gè)"發(fā)送消息_接收消息_執(zhí)行操作"的過(guò)
程。 一個(gè)完整的交互過(guò)程可能是一次單向的消息發(fā)送,也可能是兩次單向的消息發(fā)送,也就
是可以沒(méi)有返回結(jié)果,也可以有返回結(jié)果。
步驟(1. 5):組件中構(gòu)件的連接關(guān)系的描述; 因?yàn)檫B接不依賴于具體構(gòu)件,構(gòu)件的每個(gè)端口可以連接多個(gè)構(gòu)件,如圖8所示。 構(gòu)件連接關(guān)系用XML語(yǔ)言描述,如圖9所示,主要描述的內(nèi)容是 各個(gè)構(gòu)件名與構(gòu)件ID的映射 源構(gòu)件(具有唯一性的構(gòu)件ID) 源構(gòu)件出端口號(hào) 目標(biāo)構(gòu)件(具有唯一性的構(gòu)件ID) 描述的格式參見(jiàn)組件中構(gòu)件連接關(guān)系描述。
步驟(2):將多個(gè)構(gòu)件連接成組件; 步驟(2. 1) :Agent初始化; 步驟(2. 1. 1):讀取構(gòu)件連接拓?fù)浣Y(jié)構(gòu)(XML文件),并保存;
步驟(2. 1. 2):初始化Socket,包括以下步驟:
1)開(kāi)啟socket服務(wù); [OWO] 2)創(chuàng)建監(jiān)聽(tīng)socket描述符; 3)綁定本地地址到監(jiān)聽(tīng)socket,地址和端口由系統(tǒng)自定分配;
4)獲取綁定的ip地址和端口并打印顯示;
步驟(2. 2):構(gòu)件初始化;
步驟(2. 2. 1):獲取構(gòu)件定義信息; 步驟(2. 2. 2):初始化構(gòu)件監(jiān)聽(tīng)socket,并綁定本地IP地址和socket端口 ;
步驟(2. 3):構(gòu)件注冊(cè); 步驟(2. 3. 1) :Agent Client獲取構(gòu)件自身所在機(jī)器的IP地址和socket監(jiān)聽(tīng)端 口號(hào); 步驟(2. 3. 2) :Agent Client構(gòu)造注冊(cè)消息,將構(gòu)件ID、自身IP地址和監(jiān)聽(tīng)端口 號(hào)寫入消息字符串; 步驟(2. 3. 3) :Agent Client向Agent發(fā)送注冊(cè)消息,將構(gòu)件的相關(guān)信息告訴 Agent。 步驟(2. 3. 4) :Agent檢查構(gòu)件的"可接收消息類型"是否與構(gòu)件連接拓?fù)浣Y(jié)構(gòu)中 的連接有沖突,若有則拒絕注冊(cè); 步驟(2.3.5) :Agent在連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要向此構(gòu)件發(fā)送消息 的構(gòu)件,對(duì)于每一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則向它轉(zhuǎn)發(fā)新注冊(cè)構(gòu)件的信息,包含了 新注冊(cè)構(gòu)件的通信地址信息; 步驟(2. 3. 6) :Agent在連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要接收此構(gòu)件消息的 構(gòu)件,對(duì)于每一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則將它的通信地址信息發(fā)送給新注冊(cè)構(gòu) 件; 步驟(2. 3. 7) :Agent向構(gòu)件發(fā)送注冊(cè)反饋消息,消息中包含了多個(gè)與本構(gòu)件相連 的構(gòu)件的詳細(xì)信息ID號(hào)、IP地址、socket監(jiān)聽(tīng)端口號(hào)、本構(gòu)件與之連接的輸出端口號(hào)、與 跟構(gòu)件相連的輸入端口號(hào); 步驟(2.3.8):構(gòu)件收到注冊(cè)反饋信息后,對(duì)反饋信息中的每個(gè)與之連接的構(gòu)件 的詳細(xì)信息做如下處理
1)讀取輸出端口號(hào); 2)找到相應(yīng)于輸出端口的地址映射表; 3)將與之連接構(gòu)件的ID、套接字socket地址等信息添加到地址映射表中;
步驟(2.3.9) :Agent更新已注冊(cè)構(gòu)件數(shù)據(jù)庫(kù)。
步驟(2. 4):構(gòu)件間進(jìn)行通信;
構(gòu)件通過(guò)發(fā)送、接收消息進(jìn)行通信 令發(fā)送消息構(gòu)件通過(guò)Agent Client發(fā)送消息。構(gòu)件發(fā)送消息時(shí)只指定輸出端口 號(hào),Agent Client通過(guò)地址映射表為構(gòu)件找到對(duì)應(yīng)的目的構(gòu)件的通信地址。因?yàn)橐粋€(gè)輸出 端口可能連接了多個(gè)構(gòu)件,所以地址映射表中一個(gè)端口可能有多個(gè)對(duì)應(yīng)的目的構(gòu)件通信地 址,發(fā)送時(shí)要向每個(gè)目的構(gòu)件都發(fā)送一個(gè)消息。 令接收消息構(gòu)件通過(guò)Agent Client接受消息。Agent Client監(jiān)聽(tīng)socket端口 , 如果有連接請(qǐng)求則接收連接并接收消息,將接收到的消息經(jīng)過(guò)預(yù)處理后放在消息隊(duì)列中等 待構(gòu)件處理,構(gòu)件處理消息的步驟如下
1)取得消息類型; 2)進(jìn)行消息的預(yù)處理,處理跟構(gòu)件業(yè)務(wù)無(wú)關(guān)而只跟構(gòu)件管理相關(guān)的的消息;
3)處理構(gòu)件業(yè)務(wù)相關(guān)的消息;
步驟(3):維護(hù)組件;
組件維護(hù)是一個(gè)長(zhǎng)期的、動(dòng)態(tài)的過(guò)程,主要內(nèi)容包括對(duì)組件運(yùn)行狀態(tài)的監(jiān)視和組
件體系結(jié)構(gòu)的動(dòng)態(tài)變化。 步驟(3. 1):組件運(yùn)行狀態(tài)監(jiān)視; 步驟(3. 1. 1) :Agent設(shè)定一個(gè)定時(shí)器; 步驟(3. 1. 2):每個(gè)定時(shí)周期內(nèi),Agent向已經(jīng)注冊(cè)的構(gòu)件發(fā)送心跳信號(hào); 步驟(3. 1. 3) :Agent設(shè)定一個(gè)超時(shí)計(jì)時(shí)器; 步驟(3. 1.4):若計(jì)時(shí)器超時(shí),但Agent未能收到回復(fù)信號(hào),說(shuō)明此構(gòu)件可能已經(jīng)
意外停止運(yùn)行,則按構(gòu)件注銷處理。 步驟(3. 2):組件體系結(jié)構(gòu)的動(dòng)態(tài)變化; 組件體系結(jié)構(gòu)的動(dòng)態(tài)變化包括增加、刪除、替換構(gòu)件,它們共同的基礎(chǔ)是構(gòu)件注 銷。 令構(gòu)件注銷的步驟如下 1)構(gòu)件向Agent發(fā)送注銷信息; 2) Agent檢查構(gòu)件的是否已注冊(cè),若沒(méi)有注冊(cè),則忽略此消息; 3)Agent在連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要向此構(gòu)件發(fā)送消息的構(gòu)件,對(duì)于
每一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則向它轉(zhuǎn)發(fā)請(qǐng)求構(gòu)件的注銷信息; 4)Agent在連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要接收此構(gòu)件消息的構(gòu)件,對(duì)于每
一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則將注銷信息發(fā)送給它; 5)構(gòu)件收到某個(gè)注銷信息時(shí),要做如下處理 讀取注銷信息中構(gòu)件的輸出端口號(hào); 找到相應(yīng)的輸出端口的地址映射表; 遍歷地址映射表,若是剛注冊(cè)構(gòu)件的id已經(jīng)在映射表中存在,則刪除其相關(guān)地址 節(jié)點(diǎn); 6) Agent更新已注冊(cè)構(gòu)件數(shù)據(jù)庫(kù)。 令增加構(gòu)件的步驟如下 1)在XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu)配置文件中增加命令指定添加的新構(gòu)件
及其連接關(guān)系; 2)新構(gòu)件啟動(dòng)運(yùn)行; 3)接收新構(gòu)件注冊(cè),按照注冊(cè)流程處理。 令刪除構(gòu)件的步驟如下 l)Agent接受刪除命令; 2)Agent向構(gòu)件發(fā)送注銷消息; 3)接收構(gòu)件注銷請(qǐng)求,按照注銷流程處理; 4)在XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu)配置文件中,去掉所有與刪除了的構(gòu)件的 相關(guān)信息。 令替換構(gòu)件的步驟如下 1) Agent接受替換命令; 2) Agent向構(gòu)件發(fā)送注銷命令消息,按照注銷流程處理; 3)運(yùn)行新構(gòu)件;
4)接收注冊(cè)請(qǐng)求,按照注冊(cè)流程處理; 5)更新拓?fù)浣Y(jié)構(gòu)并保存到配置文件。 嚴(yán)格按上面的步驟執(zhí)行以后,就可以得到一個(gè)組件。
權(quán)利要求
可重構(gòu)軟件中基于代理的組件生成方法,其特征在于,是在可重構(gòu)路由交換平臺(tái)中依照以下步驟實(shí)現(xiàn)的步驟(1)初始化可重構(gòu)路由交換平臺(tái)設(shè)定操作系統(tǒng)支持TCP/IP協(xié)議,支持套接字Socket通信方式,所述套接字包括網(wǎng)關(guān)的IP地址和端口號(hào),定義構(gòu)件,是實(shí)施給定處理的模塊,用于處理特定類型的消息,設(shè)有一個(gè)輸入端口,接受若干類型的消息,設(shè)有若干輸出端口,每個(gè)輸出端口只輸出一類設(shè)定類型的消息,所述消息用XML語(yǔ)言描述,至少包括包括構(gòu)件名稱和版本號(hào)在內(nèi)的基本信息,輸出端口和輸入端口,組件,由構(gòu)件連接而成,是能實(shí)現(xiàn)特定功能的單元,其中構(gòu)件之間交互的消息的格式,至少包括消息ID來(lái)唯一識(shí)別消息的類型,發(fā)送者標(biāo)識(shí),接收者標(biāo)識(shí)和消息長(zhǎng)度,所述消息類型分為預(yù)留消息和用戶自定義消息,預(yù)留消息是根據(jù)路由器領(lǐng)域特性預(yù)先定義的一系列消息,其中包含了路由器控制層構(gòu)件之間的交互消息和路由協(xié)議構(gòu)件向路由管理構(gòu)件發(fā)送的添加路由消息、構(gòu)件注冊(cè)注銷消息在內(nèi)的一部分公用的消息;用戶自定義消息是用戶根據(jù)消息格式要求新創(chuàng)建的消息類型,構(gòu)件之間的交互過(guò)程是一個(gè)“發(fā)送消息-接收消息-執(zhí)行操作”的過(guò)程,構(gòu)件之間的連接關(guān)系用XML語(yǔ)言描述,至少包括源構(gòu)件,源構(gòu)件輸出端口號(hào),目標(biāo)構(gòu)件,設(shè)定構(gòu)件交互管理模塊和構(gòu)件間通信模塊,所述構(gòu)件交互管理模塊,用Agent表示,用于管理構(gòu)件連接拓?fù)浣Y(jié)構(gòu)、接收構(gòu)件注冊(cè)和注銷、轉(zhuǎn)發(fā)構(gòu)件信息、監(jiān)視構(gòu)件運(yùn)行狀態(tài)、向構(gòu)件發(fā)送控制消息以及維護(hù)構(gòu)件連接動(dòng)態(tài)變化,以實(shí)現(xiàn)構(gòu)件之間的交互和構(gòu)件的組裝管理;所述構(gòu)件間通信模塊,用AgentClient表示,設(shè)有地址映射表,以便于為構(gòu)件找到對(duì)應(yīng)的目的構(gòu)件的通信地址,還設(shè)有監(jiān)聽(tīng)Socket端口;步驟(2)依次按以下步驟生成組件步驟(2.1)構(gòu)件交互管理模塊初始化,步驟如下步驟(2.1.1)從外部讀取XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu),形成構(gòu)件連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù),并保存,步驟(2.1.2)初始化套接字Socket步驟(2.1.2.1)開(kāi)啟套接字Socket服務(wù),步驟(2.1.2.2)創(chuàng)建監(jiān)聽(tīng)Socket描述符,步驟(2.1.2.3)綁定本地地址和端口號(hào)到所述監(jiān)聽(tīng)套接字Socket,并顯示,步驟(2.2)對(duì)用戶需要的構(gòu)件進(jìn)行初始化步驟(2.2.1)獲取構(gòu)件定義信息基本信息、輸出端口號(hào)和輸入端口號(hào),步驟(2.2.2)初始化所述用戶需要的構(gòu)件的監(jiān)聽(tīng)套接字Socket,并綁定本地IP地址和socket端口,步驟(2.3)構(gòu)件注冊(cè)步驟(2.3.1)所述構(gòu)件間通信模塊Agent Client獲取所述構(gòu)件自身所在機(jī)器的IP地址和套接字socket監(jiān)聽(tīng)端口號(hào),據(jù)此構(gòu)造注冊(cè)消息,將構(gòu)件ID、自身IP地址和監(jiān)聽(tīng)端口號(hào)寫入消息字符串,步驟(2.3.2)把所述注冊(cè)信息發(fā)送給所述構(gòu)件交互管理模塊Agent,步驟(2.3.3)所述構(gòu)件交互管理模塊檢查構(gòu)件的“可接收消息類型”是否與連接拓?fù)浣Y(jié)構(gòu)中的連接有沖突,若有則拒絕注冊(cè),若無(wú)沖突,可執(zhí)行步驟(2.3.4),步驟(2.3.4)所述構(gòu)件交互管理模塊所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要向步驟(2.3)中新注冊(cè)的構(gòu)件發(fā)送消息的構(gòu)件,向每一個(gè)找到的構(gòu)件轉(zhuǎn)發(fā)新注冊(cè)構(gòu)件的信息,其中包含通信地址信息,步驟(2.3.5)所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要接收所述新注冊(cè)構(gòu)件消息的構(gòu)件,對(duì)于每一個(gè)找到的構(gòu)件,若是已經(jīng)注冊(cè)了,則將它的通信地址信息發(fā)送給新注冊(cè)構(gòu)件,步驟(2.3.6)所述構(gòu)件交互管理模塊向所述新注冊(cè)的構(gòu)件發(fā)送注冊(cè)反饋信息,其中包含了多個(gè)與所述新注冊(cè)構(gòu)件相連的構(gòu)件的詳細(xì)信息ID號(hào)、IP地址、套接字Socket端口號(hào)、所述新注冊(cè)構(gòu)件與之連接的輸出端口號(hào)以及輸入端口號(hào),步驟(2.3.7)所述新注冊(cè)構(gòu)件收到注冊(cè)反饋信息后,對(duì)每個(gè)與之連接的構(gòu)件的詳細(xì)信息,所述構(gòu)件間通信模塊Agent Client做如下處理讀取輸出端口號(hào),找到相應(yīng)的輸出端口的地址映射表項(xiàng),將遠(yuǎn)端構(gòu)件的ID、Socket地址等信息添加到該地址映射表項(xiàng)中,步驟(2.3.8)所述構(gòu)件交互管理模塊更新已注冊(cè)構(gòu)件數(shù)據(jù)庫(kù)。
2. 根據(jù)權(quán)利要求1所述的可重構(gòu)軟件中基于代理的組件生成方法,其特征在于,構(gòu)件 間按以下步驟進(jìn)行通信步驟(2-1):發(fā)送消息發(fā)送構(gòu)件指定一個(gè)輸出端口,所述構(gòu)件間通信模塊根據(jù)所述地址映射表,向與所述的指定端口相連的目的構(gòu)件的輸入端口都發(fā)送一個(gè)消息,步驟(2-2):接收消息所述構(gòu)件間的通信模塊通過(guò)套接字socket端口監(jiān)聽(tīng)連接請(qǐng)求,如有連接請(qǐng)求則接收連接并接收消息,將接收到的消息放在消息隊(duì)列中,以便構(gòu)件處理。
3. 根據(jù)權(quán)利要求1所述的可重構(gòu)軟件中基于代理的組件生成方法,其特征在 于,按以下步驟維護(hù)構(gòu)件步驟(3-1):在每個(gè)定時(shí)周期內(nèi),所述構(gòu)件交互管理模塊向已經(jīng)注冊(cè)的構(gòu)件發(fā)送心跳 信號(hào),步驟(3-2):若超時(shí)未能收到回復(fù)信號(hào),則發(fā)送一個(gè)注銷命令給所述沒(méi)有回復(fù)的構(gòu)件,再按步驟(4-1)到步驟(4-6)所述的構(gòu)件注銷處理。
4. 根據(jù)權(quán)利要求1所述的可重構(gòu)軟件中基于代理的組件生成方法,其特征在于,按以下步驟注銷構(gòu)件步驟(4-1):構(gòu)件向所述構(gòu)件交互管理模塊發(fā)送注銷信息,步驟(4-2):所述構(gòu)件交互管理模塊檢查步驟(4-1)中的構(gòu)件是否已注冊(cè),若沒(méi)有注 冊(cè),則不作處理,若已注冊(cè),則進(jìn)行步驟(4-3),步驟(4-3):所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要向所述注銷構(gòu)件發(fā)送消息的構(gòu)件,對(duì)于每一個(gè)找到已注冊(cè)構(gòu)件轉(zhuǎn)發(fā)步驟(4-1)所述的請(qǐng)求注銷構(gòu)件的注冊(cè)信息,步驟(4-4):所述構(gòu)件交互管理模塊在所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)中找到所有需要接收所述注銷構(gòu)件消息的構(gòu)件,對(duì)于每一個(gè)找到已注冊(cè)構(gòu)件轉(zhuǎn)發(fā)步驟(4-1)所述的請(qǐng)求注銷構(gòu)件的注冊(cè)信息,步驟(4-5):在步驟(4-3)或步驟(4-4)中所述的收到了注銷信息的構(gòu)件中進(jìn)行如下處理讀取所述注銷信息中構(gòu)件的輸出端口號(hào),找到相應(yīng)的輸出端口的地址映射表,遍歷所述地址映射表,根據(jù)所述請(qǐng)求注銷構(gòu)件ID號(hào),刪除其相關(guān)地址節(jié)點(diǎn),步驟(4-6):所述構(gòu)件交互管理模塊更新所述連接拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)庫(kù)。
5. 根據(jù)權(quán)利要求1所述的可重構(gòu)軟件中基于代理的組件生成方法,其特征在于,依次按以下步驟添加構(gòu)件步驟(5-1):在所述XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu)配置文件中增加命令指定添加的新構(gòu)件及其連接關(guān)系,步驟(5-2):新構(gòu)件啟動(dòng)運(yùn)行,步驟(5-3):所述構(gòu)件交互管理模塊接收新構(gòu)件注冊(cè),按照步驟(2. 3)所述的注冊(cè)流程處理。
6. 根據(jù)權(quán)利要求1所述的可重構(gòu)軟件中基于代理的組件生成方法,其特征在于,依次按照以下步驟刪除構(gòu)件步驟(6-1):所述構(gòu)件交互管理模塊在接受刪除命令后,向要?jiǎng)h除的構(gòu)件發(fā)送注銷消息,步驟(6-2):所述構(gòu)件交互管理模塊接收構(gòu)件注銷請(qǐng)求,按照步驟(4-1)到步驟(4.6)所述的注銷流程處理,步驟(6-3):更新XML文件形式的構(gòu)件連接拓?fù)浣Y(jié)構(gòu),去掉所有與刪除了的構(gòu)件的相關(guān)信息。
全文摘要
可重構(gòu)軟件中基于代理的組件生成方法,屬于可重構(gòu)網(wǎng)絡(luò)技術(shù)的領(lǐng)域,其特征在于,在可重構(gòu)路由交換平臺(tái)中設(shè)置構(gòu)件交互管理模塊,用于管理構(gòu)件連接拓?fù)浣Y(jié)構(gòu)、接收構(gòu)件注冊(cè)和注銷、轉(zhuǎn)發(fā)構(gòu)件信息、監(jiān)視構(gòu)件運(yùn)行狀態(tài)、向構(gòu)件發(fā)送控制消息以及維護(hù)構(gòu)件連接動(dòng)態(tài)變化,以實(shí)現(xiàn)構(gòu)件之間的交互和構(gòu)件的組裝管理;構(gòu)件間通信模塊,設(shè)有地址映射表,以便于為構(gòu)件找到對(duì)應(yīng)的目的構(gòu)件的通信地址,還設(shè)有監(jiān)聽(tīng)socket端口,此后,再依次執(zhí)行初始化可重構(gòu)路由交換平臺(tái),生成組件的步驟。本發(fā)明具有軟件耦合程度低,集成性好,代碼重用度高的優(yōu)點(diǎn)。
文檔編號(hào)H04L29/06GK101789938SQ20101003403
公開(kāi)日2010年7月28日 申請(qǐng)日期2010年1月12日 優(yōu)先權(quán)日2010年1月12日
發(fā)明者華婷, 徐恪, 陳文龍 申請(qǐng)人:清華大學(xué)