實(shí)現(xiàn)多平臺(tái)消息處理的裝置及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)通信設(shè)備,具體涉及實(shí)現(xiàn)多平臺(tái)消息處理的裝置及方法。
【背景技術(shù)】
[0002]隨著對(duì)數(shù)據(jù)通信設(shè)備功能需求的不斷增加,數(shù)據(jù)通信設(shè)備不僅需要完成設(shè)備間的信令報(bào)文的交互,還需要監(jiān)控操作系統(tǒng)I/o事件、設(shè)備操作系統(tǒng)底層驅(qū)動(dòng)事件以及完成內(nèi)部管理事件報(bào)文的處理工作等,在下面我們將除信令報(bào)文外的其他報(bào)文統(tǒng)稱為事件報(bào)文。
[0003]目前,數(shù)據(jù)通信設(shè)備的網(wǎng)絡(luò)處理軟件大多只能支持對(duì)來自一種平臺(tái)的消息的調(diào)度、分發(fā)和處理。數(shù)據(jù)通信設(shè)備的網(wǎng)絡(luò)處理軟件由于其功能用途的特殊性,普遍采用非操作系統(tǒng)的第三方 TCP/IP (Transmiss1n Control Protocol/Internet Protocol,傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議)協(xié)議棧來完成與外部設(shè)備間的信令報(bào)文交互,數(shù)據(jù)通信設(shè)備的網(wǎng)絡(luò)處理軟件主要負(fù)責(zé)調(diào)度、分發(fā)第三方TCP/IP協(xié)議棧的信令報(bào)文,并且該網(wǎng)絡(luò)處理軟件只能支持來自一種TCP/IP協(xié)議棧的消息的調(diào)度、分發(fā),即第三方TCP/IP協(xié)議棧消息的調(diào)度、分發(fā)。
[0004]當(dāng)數(shù)據(jù)通信設(shè)備的網(wǎng)絡(luò)處理軟件應(yīng)用模塊要求與其他平臺(tái)消息進(jìn)行通信時(shí),例如與操作系統(tǒng)上其他進(jìn)程進(jìn)行內(nèi)部通信,由于在操作系統(tǒng)上不同進(jìn)程間的通信使用的是操作系統(tǒng)的TCP/IP協(xié)議棧,所以采用第三方TCP/IP協(xié)議棧的網(wǎng)絡(luò)處理軟件將無法直接完成同一操作系統(tǒng)之上不同進(jìn)程間的消息通信以及系統(tǒng)管理工作,需要利用一個(gè)代理模塊將操作系統(tǒng)TCP/IP協(xié)議棧的事件報(bào)文轉(zhuǎn)換為第三方TCP/IP協(xié)議棧的信令報(bào)文,從而實(shí)現(xiàn)與其他進(jìn)程的通信,這就會(huì)耗費(fèi)大量的二次時(shí)間,如圖1所示。這種利用代理模塊實(shí)現(xiàn)多平臺(tái)消息處理方法具有以下缺點(diǎn):
[0005](I)開發(fā)這樣一個(gè)代理模塊將耗時(shí)、費(fèi)力;
[0006](2)報(bào)文轉(zhuǎn)換過程中代理模塊還會(huì)增加一次數(shù)據(jù)拷貝,降低系統(tǒng)效率;
[0007](3)操作系統(tǒng)內(nèi)部事件報(bào)文會(huì)占用網(wǎng)絡(luò)處理軟件信令報(bào)文通道的帶寬;
[0008](4)網(wǎng)絡(luò)處理軟件不僅需要處理內(nèi)部進(jìn)程間的通信,還需要處理系統(tǒng)I/O事件、底層驅(qū)動(dòng)事件等,這樣就需要開發(fā)大量的代理模塊來實(shí)現(xiàn)消息的轉(zhuǎn)換工作。
[0009]目前,大多數(shù)數(shù)據(jù)通信設(shè)備的網(wǎng)絡(luò)處理軟件運(yùn)行都是基于某一種操作系統(tǒng)平臺(tái)之上,而大多數(shù)的操作系統(tǒng)都能夠支持多線程任務(wù)機(jī)制,可以同時(shí)進(jìn)行多種任務(wù)的協(xié)同工作,所以如果可以充分利用操作系統(tǒng)的多線程任務(wù)機(jī)制將能夠?qū)崿F(xiàn)多平臺(tái)消息處理,并且可以克服利用代理模塊實(shí)現(xiàn)多平臺(tái)消息處理方法的以上缺點(diǎn)。
【發(fā)明內(nèi)容】
[0010]本發(fā)明所要解決的技術(shù)問題是充分利用操作系統(tǒng)的多線程任務(wù)機(jī)制實(shí)現(xiàn)多平臺(tái)消息處理,以克服利用代理模塊實(shí)現(xiàn)多平臺(tái)消息處理方法耗時(shí)、費(fèi)力,系統(tǒng)效率低和報(bào)文通道寬帶緊張的問題。
[0011]為了解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是提供一種實(shí)現(xiàn)多平臺(tái)消息處理的方法,該方法為:
[0012]基于系統(tǒng)操作平臺(tái)的支持多線程任務(wù)機(jī)制,為每一種平臺(tái)的TCP/IP協(xié)議棧的報(bào)文創(chuàng)建一個(gè)平臺(tái)消息分發(fā)線程,并在每一個(gè)平臺(tái)消息分發(fā)線程內(nèi)設(shè)置一個(gè)存儲(chǔ)該平臺(tái)的TCP/IP協(xié)議棧統(tǒng)一分配的描述符和監(jiān)聽內(nèi)容的監(jiān)聽隊(duì)列,以及一個(gè)存儲(chǔ)所述描述符和回調(diào)函數(shù)的回調(diào)隊(duì)列,通過利用每個(gè)平臺(tái)描述符、監(jiān)聽內(nèi)容狀態(tài)和回調(diào)函數(shù)實(shí)現(xiàn)多平臺(tái)消息處理;
[0013]同時(shí)也為網(wǎng)絡(luò)處理軟件內(nèi)部的應(yīng)用模塊創(chuàng)建一個(gè)第一消息分發(fā)線程,在第一消息分發(fā)線程內(nèi)部設(shè)置一個(gè)用于存儲(chǔ)消息目的地址和發(fā)送內(nèi)容的第一監(jiān)聽隊(duì)列和一個(gè)用于存儲(chǔ)每個(gè)應(yīng)用模塊地址和回調(diào)函數(shù)的第一回調(diào)隊(duì)列,利用該線程實(shí)現(xiàn)對(duì)應(yīng)用模塊之間內(nèi)部通信消息的分發(fā)、傳遞。
[0014]在上述方法中,通過利用每個(gè)平臺(tái)描述符、監(jiān)聽內(nèi)容狀態(tài)和回調(diào)函數(shù)實(shí)現(xiàn)多平臺(tái)消息處理包括以下步驟:
[0015]步驟A110、應(yīng)用模塊檢查是否有TCP/IP協(xié)議棧統(tǒng)一分配的描述符需要監(jiān)聽,如果有描述符需要監(jiān)聽,則執(zhí)行步驟A120 ;否則執(zhí)行步驟A130 ;
[0016]步驟A120、將需要監(jiān)聽的描述符和監(jiān)聽內(nèi)容存儲(chǔ)在與其對(duì)應(yīng)平臺(tái)消息分發(fā)線程的監(jiān)聽隊(duì)列中,將需要監(jiān)聽的描述符和回調(diào)函數(shù)存儲(chǔ)在對(duì)應(yīng)平臺(tái)消息分發(fā)線程的回調(diào)隊(duì)中,然后執(zhí)彳丁步驟Al 10 ;
[0017]步驟A130、每個(gè)平臺(tái)消息分發(fā)線程根據(jù)其監(jiān)聽隊(duì)列中的描述符和監(jiān)聽內(nèi)容的狀態(tài)和其回調(diào)隊(duì)列中的回調(diào)函數(shù)實(shí)現(xiàn)多平臺(tái)消息處理。
[0018]在上述方法中,步驟A130包括以下步驟:
[0019]步驟A131、每個(gè)平臺(tái)消息分發(fā)線程判斷其監(jiān)聽隊(duì)列是否為空,如果為空則執(zhí)行步驟A137 ;否則執(zhí)行步驟A132 ;
[0020]步驟A132、調(diào)用事件通知函數(shù)對(duì)所述監(jiān)聽隊(duì)列中描述符對(duì)應(yīng)的監(jiān)聽內(nèi)容進(jìn)行遍歷監(jiān)聽;
[0021]步驟A133、判斷所述監(jiān)聽隊(duì)列中的描述符是否有監(jiān)聽內(nèi)容到來的,如果有則執(zhí)行步驟A134 ;否則執(zhí)行步驟A131 ;
[0022]步驟A134、查詢?cè)摫O(jiān)聽隊(duì)列對(duì)應(yīng)的回調(diào)隊(duì)列中是否存在該監(jiān)聽內(nèi)容到來的描述符H,如果存在描述符H,則執(zhí)行步驟A135,否則執(zhí)行步驟A131 ;
[0023]步驟A135、執(zhí)行所述回調(diào)隊(duì)列中與描述符H對(duì)應(yīng)的回調(diào)函數(shù);
[0024]步驟A136、判斷有監(jiān)聽內(nèi)容到來的描述符H是否處理完畢,如果是則執(zhí)行步驟A131 ;否則執(zhí)行步驟A134 ;
[0025]步驟A137、消息分發(fā)、傳遞結(jié)束。
[0026]在上述方法中,利用第一消息分發(fā)線程實(shí)現(xiàn)對(duì)應(yīng)用模塊之間內(nèi)部通信消息的分發(fā)、傳遞包括以下步驟:
[0027]步驟A210、啟動(dòng)N個(gè)應(yīng)用模塊(N為自然數(shù)),并將其攜帶的地址作為消息地址與回調(diào)函數(shù)一同存儲(chǔ)在第一消息分發(fā)線程的回調(diào)隊(duì)列中;
[0028]步驟A220、當(dāng)有應(yīng)用模塊發(fā)送內(nèi)部消息時(shí),將消息的目的地址作為消息地址和需要發(fā)送的消息內(nèi)容一同依次存儲(chǔ)在第一監(jiān)聽隊(duì)列中;
[0029]步驟A230、第一消息分發(fā)線程利用第一監(jiān)聽隊(duì)列和第一回調(diào)隊(duì)列中的消息地址實(shí)現(xiàn)對(duì)應(yīng)用模塊之間內(nèi)部通信消息的分發(fā)、傳遞。
[0030]在上述方法中,步驟A210具體包括以下步驟:
[0031]步驟A211、啟動(dòng)第η個(gè)應(yīng)用模塊(η彡N,N為自然數(shù)),并判斷應(yīng)用模塊η是否啟動(dòng)成功,如果啟動(dòng)成功,則執(zhí)行步驟Α212 ;否則執(zhí)行步驟Α213 ;
[0032]步驟Α212、將應(yīng)用模塊η攜帶的身份地址作為消息地址與回調(diào)函數(shù)一同存儲(chǔ)在第一消息分發(fā)線程的第一回調(diào)隊(duì)列中;
[0033]步驟A213、判斷所有應(yīng)用模塊是否全部啟動(dòng)完畢,如果全部啟動(dòng),則執(zhí)行步驟Α214 ;否則執(zhí)行步驟Α211 ;
[0034]步驟Α214、程序結(jié)束。
[0035]在上述方法中,步驟Α220具體包括以下步驟:
[0036]步驟Α231、判斷第一監(jiān)聽隊(duì)列是否為空,如果是則執(zhí)行步驟Α235 ;否則執(zhí)行步驟Α232 ;
[0037]步驟Α232、從第一監(jiān)聽隊(duì)列首部取出一條消息,并獲取其在第一監(jiān)聽隊(duì)列中的消息地址;
[0038]步驟Α233、查詢第一回調(diào)隊(duì)列中是否存在與該消息地址一致的消息地址,如果存在,則執(zhí)行步驟Α234 ;否則執(zhí)行步驟Α231 ;
[0039]步驟Α234、執(zhí)行第一回調(diào)隊(duì)列中與該消息地址相對(duì)應(yīng)的回調(diào)函數(shù),然后執(zhí)行步驟Α231 ;
[0040]步驟Α235、對(duì)內(nèi)部通信消息的分發(fā)、傳遞結(jié)束。
[0041]本發(fā)明還提供了一種實(shí)現(xiàn)多平臺(tái)消息處理的裝置,包括第一消息分發(fā)模塊和與每個(gè)平臺(tái)對(duì)應(yīng)的M個(gè)平臺(tái)消息分發(fā)模塊;
[0042]所述第一消息分發(fā)模塊與網(wǎng)絡(luò)處理軟件內(nèi)部N個(gè)應(yīng)用模塊連接,用于分發(fā)、傳遞所述應(yīng)用模塊間的內(nèi)部通信消息;所述第一消息分發(fā)模塊內(nèi)部設(shè)有用于存儲(chǔ)第一監(jiān)聽隊(duì)列和第一回調(diào)隊(duì)列,所述第一監(jiān)聽隊(duì)列用于存儲(chǔ)所述應(yīng)用模塊發(fā)送的每條消息的目的地址和發(fā)送內(nèi)容;所