本發(fā)明屬于無線通信領(lǐng)域,尤其涉及集群通信系統(tǒng)設(shè)備。
背景技術(shù):
數(shù)字集群通信是二十世紀末興起的新型移動通信系統(tǒng),它除了具備一般通信業(yè)務(wù)中的點對點呼叫功能外,還能實現(xiàn)點對多點的群組呼叫業(yè)務(wù),同時在此基礎(chǔ)上,還定義了優(yōu)先級呼叫、呼叫等待等補充業(yè)務(wù)。除此之外,數(shù)字集群系統(tǒng)還具有呼叫建立快、延遲短、保密性高等特點?;跀?shù)字集群通信在技術(shù)上的特點和優(yōu)勢,被廣泛引用于公安、消防、應急指揮調(diào)度等專用通信領(lǐng)域。
數(shù)字集群通信系統(tǒng)功能非常龐大和復雜,結(jié)合降低實現(xiàn)成本和提高軟件擴展性的考慮,設(shè)計一個具有高擴展性和快速實現(xiàn)的通用軟件架構(gòu)是非常必要的。
技術(shù)實現(xiàn)要素:
本發(fā)明所解決的技術(shù)問題是:在集群通信系統(tǒng)設(shè)計開發(fā)中,提出了一種能夠具有高擴展性和快速實現(xiàn)的通用軟件架構(gòu),為在此架構(gòu)中的開發(fā)人員提供了進行模塊化實體開發(fā)的快速集成和移植功能。
本發(fā)明采用的技術(shù)方案為:
一種通信系統(tǒng)中具有高擴展性的通用軟件架構(gòu)實現(xiàn)方法,其特征在于,包括以下步驟:
步驟1:啟動主線程,根據(jù)配置選擇應用程序運行的操作系統(tǒng),聲明模塊接口,初始化應用程序參數(shù);
步驟2:為主線程和每一個子線程分別建立一個線程驅(qū)動上下文,并在每一個線程驅(qū)動上下文中定義該線程的線程序號、建立模塊隊列、建立內(nèi)部消息優(yōu)先隊列和建立外部消息優(yōu)先隊列;
步驟3:注冊外部模塊實體的服務(wù)通道,并分別給各個服務(wù)通道分配一個通道號;
步驟4:為主線程和每一個子線程分別注冊應用程序的內(nèi)部模塊實體,并分別將內(nèi)部模塊實體添加到對應的模塊隊列中;給所有的內(nèi)部模塊實體和所有的外部模塊實體分別分配一個模塊號,將外部模塊實體的模塊號和通道號一一對應進行關(guān)聯(lián);
步驟5:根據(jù)模塊接口聲明分別對主線程和每一個子線程上的內(nèi)部模塊實體進行配置,并在每一個內(nèi)部模塊實體上分別配置內(nèi)外事件的消息處理程序;
步驟6:啟動子線程,分別將每一個子線程返回的系統(tǒng)線程號和線程上下文中定義的線程序號一一對應進行關(guān)聯(lián);
步驟7:主線程和每一個子線程循環(huán)監(jiān)聽外部模塊實體和內(nèi)部模塊實體的消息事件,并按優(yōu)先級分別對應存入該線程的外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中,無消息事件則進入等待狀態(tài);所述的消息事件中包括該消息事件的目的模塊號;
步驟8:分別按優(yōu)先級從外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中取出優(yōu)先級最高的消息事件,根據(jù)消息事件的目的模塊號將消息事件發(fā)送至內(nèi)部模塊實體,內(nèi)部模塊實體進入消息事件處理程序;根據(jù)消息事件的處理結(jié)果判斷是否需要對外發(fā)送消息,若是,則進入發(fā)送消息事件程序,執(zhí)行步驟9;否則執(zhí)行步驟9;
步驟9:查詢主線程和每一個子線程中的外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中是否還有未處理的消息事件,若有,則轉(zhuǎn)入步驟8,否則轉(zhuǎn)入步驟7。
其中,步驟8中發(fā)送消息事件程序具體為:
生成消息事件,填充目的模塊號和線程序號,根據(jù)目的模塊號判斷是外部模塊實體還是內(nèi)部模塊實體;
如果是外部模塊實體,則根據(jù)目的模塊號找到關(guān)聯(lián)的通道號和服務(wù)通道,通過服務(wù)通道發(fā)送消息事件到外部模塊實體;
如果是內(nèi)部模塊實體,則通過線程序號找到該模塊注冊的線程,將該消息事件插入到該線程的內(nèi)部消息優(yōu)先隊列中,根據(jù)線程序號關(guān)聯(lián)的系統(tǒng)線程號找到該線程并發(fā)送喚醒信號給該線程,通知線程進行消息處理。
與現(xiàn)有技術(shù)相比本發(fā)明的優(yōu)點在于:
本發(fā)明所述軟件架構(gòu)設(shè)計的控制流和事件機制便于集成新的業(yè)務(wù)模塊到系統(tǒng)中,具備高擴展性,同時能夠促使開發(fā)人員專注于自己的業(yè)務(wù)邏輯設(shè)計,具備實現(xiàn)快速開發(fā)業(yè)務(wù)的能力。
附圖說明
圖1是本發(fā)明多線程運行模式流程圖。
圖2是本發(fā)明軟件框架運行模型。
圖3是本發(fā)明收消息模型。
具體實施方式
下面結(jié)合附圖1-3,對本發(fā)明做進一步詳細的說明。
本發(fā)明的軟件架構(gòu)具有下列內(nèi)容:
1、控制流
軟件架構(gòu)的核心特征是處理內(nèi)外消息的事件驅(qū)動,在一個典型的實時或者其他操作系統(tǒng)中,控制流通常體現(xiàn)為進程、任務(wù)、線程的概念。事件驅(qū)動程序是基于無限事件循環(huán)來實現(xiàn)的,其中包含等待行為,在等待行為中,操作系統(tǒng)將阻塞直到等待事件的到來,當?shù)却录l(fā)生時,喚醒處理線程,處理事件并返回等待狀態(tài)。
本文的軟件架構(gòu)提供了一個標準化的事件循環(huán)工作流的實現(xiàn),可以用統(tǒng)一的方式移植和集成其他功能實體模塊到框架中,通用框架提供高擴展性的集成其他實體模塊作為一個處理模塊、線程或者單獨的進程的方法。
2、消息流
軟件架構(gòu)提供了一組運行于單線程或者多線程上的不同模塊實體間的消息通信機制,每個模塊實體都會被分配一個公共的名字用來注冊自己公共名稱標識作為命名目的地,在集成的系統(tǒng)程序中,實體模塊可以通過命名目的地路由到正確的信息實體。事件循環(huán)處理機制可以等待和接收外部模塊和內(nèi)部模塊的消息,收到消息后調(diào)用模塊實體處理程序來完成一個完整的消息流程。
本發(fā)明的流程圖如圖1所示,具體包括以下步驟:
步驟1:啟動主線程,根據(jù)配置選擇應用程序運行的操作系統(tǒng),聲明模塊接口,初始化應用程序參數(shù);
步驟2:為主線程和每一個子線程分別建立一個線程驅(qū)動上下文,并在每一個線程驅(qū)動上下文中定義該線程的線程序號、建立模塊隊列、建立內(nèi)部消息優(yōu)先隊列和建立外部消息優(yōu)先隊列;
步驟3:注冊外部模塊實體的服務(wù)通道,并分別給各個服務(wù)通道分配一個通道號;
步驟4:為主線程和每一個子線程分別注冊應用程序的內(nèi)部模塊實體,并分別將內(nèi)部模塊實體添加到對應的模塊隊列中;給所有的內(nèi)部模塊實體和所有的外部模塊實體分別分配一個模塊號,將外部模塊實體的模塊號和通道號一一對應進行關(guān)聯(lián);
步驟5:根據(jù)模塊接口聲明分別對主線程和每一個子線程上的內(nèi)部模塊實體進行配置,并在每一個內(nèi)部模塊實體上分別配置內(nèi)外事件的消息處理程序;
步驟6:啟動子線程,分別將每一個子線程返回的系統(tǒng)線程號和線程上下文中定義的線程序號一一對應進行關(guān)聯(lián);
步驟7:主線程和每一個子線程循環(huán)監(jiān)聽外部模塊實體和內(nèi)部模塊實體的消息事件,并按優(yōu)先級分別對應存入該線程的外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中,無消息事件則進入等待狀態(tài);所述的消息事件中包括該消息事件的目的模塊號;
步驟8:分別按優(yōu)先級從外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中取出優(yōu)先級最高的消息事件,根據(jù)消息事件的目的模塊號將消息事件發(fā)送至內(nèi)部模塊實體,內(nèi)部模塊實體進入消息事件處理程序;根據(jù)消息事件的處理結(jié)果判斷是否需要對外發(fā)送消息,若是,則進入發(fā)送消息事件程序,執(zhí)行步驟9;否則執(zhí)行步驟9;
進入發(fā)送消息事件程序,具體為:生成消息事件,填充目的模塊號和線程序號,根據(jù)目的模塊號判斷是外部模塊實體還是內(nèi)部模塊實體;
如果是外部模塊實體,則根據(jù)目的模塊號找到關(guān)聯(lián)的通道號和服務(wù)通道,通過服務(wù)通道發(fā)送消息事件到外部模塊實體;
如果是內(nèi)部模塊實體,則通過線程序號找到該模塊注冊的線程,將該消息事件插入到該線程的內(nèi)部消息優(yōu)先隊列中,根據(jù)線程序號關(guān)聯(lián)的系統(tǒng)線程號找到該線程并發(fā)送喚醒信號給該線程,通知線程進行消息處理。
步驟9:查詢外部消息優(yōu)先隊列和內(nèi)部消息優(yōu)先隊列中是否還有未處理的消息事件,若有,則轉(zhuǎn)入步驟8,否則轉(zhuǎn)入步驟7。
如圖2所示:多個分離的實體模塊運行在線程模式中,包括軟件啟動、模塊注冊、無限事件處理循環(huán)、消息優(yōu)先隊列、消息調(diào)度、實體模塊,這6部分構(gòu)成了一個完整的工作流程框架驅(qū)動整個程序的運行。運行過程具體為:首先是啟動執(zhí)行,打開與外部實體的通信機制,注冊實體模塊,啟動無限事件處理循環(huán)。事件驅(qū)動循環(huán)中會收到內(nèi)外部實體的消息事件,添加到消息優(yōu)先隊列中,消息調(diào)度程序根據(jù)消息事件的目的地址,選擇不同的實體模塊來處理該消息事件。最后實體模塊對該消息事件進行處理,處理完畢返回軟件框架事件處理循環(huán)中,接著進入下一事件循環(huán)。
如圖3所示:消息分為外部消息、內(nèi)部消息,外部消息通過注冊的通道號和模塊號關(guān)聯(lián),然后通過模塊號進入內(nèi)部尋址,內(nèi)部消息則直接通過模塊號尋址,程序收到的外部消息放入外部消息隊列,收到的內(nèi)部消息則放入內(nèi)部消息隊列,然后通過事件處理程序進行程序處理。
綜上所述,以上僅為本發(fā)明的較佳應用示例,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。