專利名稱:一種基于無線會(huì)話協(xié)議實(shí)現(xiàn)數(shù)據(jù)快速處理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及WAP (無線應(yīng)用協(xié)議)技術(shù),尤其涉及的是, 一種基于無 線會(huì)話協(xié)議(WSP, Wireless Session Protocol)實(shí)現(xiàn)面向連接服務(wù)的數(shù)據(jù)快 速處理的方法。
背景技術(shù):
目前,使用手才幾通過WAP上網(wǎng)的用戶越來越多,而WAP網(wǎng)關(guān)服務(wù)器 是手機(jī)上網(wǎng)的一個(gè)關(guān)鍵設(shè)備,它的主要職責(zé)是提供與手機(jī)端對等的協(xié)議棧 實(shí)現(xiàn),對手機(jī)與內(nèi)容服務(wù)器之間的數(shù)據(jù)包進(jìn)行內(nèi)容轉(zhuǎn)換,并保證數(shù)據(jù)包的 安全傳輸。WAP網(wǎng)關(guān)服務(wù)器是手機(jī)上網(wǎng)中的核心樞紐設(shè)備,其性能高低直 接影響到數(shù)據(jù)包的傳輸速度、同時(shí)在線的用戶數(shù)量以及終端手機(jī)用戶的滿 意度等。WSP協(xié)議是WAP協(xié)議的核心之一,它提供了一種方法,使得相互協(xié) 作的客戶端/服務(wù)器應(yīng)用程序之間,能夠進(jìn)行有組織的數(shù)據(jù)交換。WSP有兩 種會(huì)話服務(wù)面向連接服務(wù)和面向無連接服務(wù)?,F(xiàn)網(wǎng)絕大部分用戶上網(wǎng)采 用面向連接服務(wù),首先建立可靠的從客戶端到服務(wù)器的會(huì)話,而在使用完 服務(wù)之后,并有序釋放該會(huì)話。現(xiàn)有技術(shù)中,WAP網(wǎng)關(guān)采用消息驅(qū)動(dòng)機(jī)制, 使用動(dòng)態(tài)內(nèi)存分配的隊(duì)列來實(shí)現(xiàn)接收和發(fā)送數(shù)據(jù)包,在處理收到的數(shù)據(jù)包 時(shí)又頻繁使用了動(dòng)態(tài)內(nèi)存分配隊(duì)列來存儲(chǔ)相關(guān)處理結(jié)果,同時(shí)使用網(wǎng)關(guān)IP 地址端口和手機(jī)IP地址端口都是以字符串的形式來作索引查找方式,這種 WSP協(xié)議面向連接服務(wù)的實(shí)現(xiàn)算法直接影響了 WAP網(wǎng)關(guān)的性能,不僅占 用更多的存儲(chǔ)空間,而且不方便判斷比較,這樣就導(dǎo)致了 WAP網(wǎng)關(guān)性能下 降,邇降低了 WAP網(wǎng)關(guān)的穩(wěn)定性。因此,現(xiàn)有技術(shù)存在缺陷,需要改進(jìn)。 發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是提供一種新的基于無線會(huì)話協(xié)議實(shí)現(xiàn)數(shù) 據(jù)快速處理的方法,避免內(nèi)存頻繁申請釋放帶來的系統(tǒng)開銷,以占用更少的存儲(chǔ)空間,避免不方便判斷比較的缺陷,用于提高WAP網(wǎng)關(guān)性能和穩(wěn)定 性。本發(fā)明的技術(shù)方案如下一種基于無線會(huì)話協(xié)議實(shí)現(xiàn)數(shù)據(jù)快速處理的方法,其包括以下步驟 Al、預(yù)建立哈希索引數(shù)組、會(huì)話狀態(tài)機(jī)數(shù)組和方法狀態(tài)機(jī)數(shù)組;A2、從消 息隊(duì)列中獲取用戶請求消息,計(jì)算其哈希鍵值,在所述哈希索引數(shù)組中, 查詢是否存在所述消息的會(huì)話ID,否則為該用戶建立會(huì)話并創(chuàng)建所述會(huì)話 信息;A3、根據(jù)所述消息的會(huì)話ID,在所述方法狀態(tài)機(jī)數(shù)組中,查詢是否 存在所述會(huì)話ID對應(yīng)的方法狀態(tài)機(jī)信息,否則為所述消息創(chuàng)建方法狀態(tài)機(jī) 信息;A4、根據(jù)所述消息及其方法狀態(tài)機(jī)信息進(jìn)行數(shù)據(jù)處理,并更新所述 方法狀態(tài)機(jī)數(shù)組中存儲(chǔ)的方法狀態(tài)機(jī)信息。所述的方法,其中,步驟Al之后還執(zhí)行以下步驟All、判斷用戶上 網(wǎng),則為該用戶建立會(huì)話并創(chuàng)建所述會(huì)話信息;創(chuàng)建所述會(huì)話信息包括, 將所述會(huì)話信息存儲(chǔ)在所述會(huì)話狀態(tài)機(jī)數(shù)組的某一會(huì)話元素,并將所述會(huì) 話元素的下標(biāo)作為會(huì)話ID,存儲(chǔ)在所述哈希索引數(shù)組;或者,A12、判斷 所述用戶上網(wǎng)收發(fā)消息,則為每次交互的消息創(chuàng)建方法狀態(tài)機(jī)信息;創(chuàng)建 方法狀態(tài)機(jī)信息包括,將當(dāng)前交互的消息所處理的方法狀態(tài)機(jī)信息及其所 屬會(huì)話的會(huì)話ID,存儲(chǔ)在所述方法狀態(tài)機(jī)數(shù)組的某一方法元素;或者,A13、 判斷所述用戶結(jié)束上網(wǎng)或者超時(shí)未操作,則斷開所述會(huì)話,釋放其占用的 所述方法狀態(tài)機(jī)數(shù)組的方法元素、所述會(huì)話狀態(tài)機(jī)數(shù)組的會(huì)話元素、所述
哈希索引數(shù)組的索引元素。所述的方法,其中,步驟A12之后還包括以下步驟定期檢查所述會(huì)話狀態(tài)機(jī)數(shù)組,清理超時(shí)的會(huì)話元素。所述的方法,其中,根據(jù)WAP網(wǎng)關(guān)的運(yùn)行能力,預(yù)設(shè)置所述哈希索引 數(shù)組、所述會(huì)話狀態(tài)機(jī)數(shù)組和所述方法狀態(tài)機(jī)數(shù)組的大小。所述的方法,其中,所述方法元素的下標(biāo)為網(wǎng)關(guān)分配的方法狀態(tài)機(jī)ID; 并且,步驟A2之前還執(zhí)行以下步驟A20:網(wǎng)關(guān)判斷所述消息為服務(wù)器返回的 消息并具有所述方法狀態(tài)機(jī)ID,則在方法狀態(tài)機(jī)信息數(shù)組中查找所述消息 的方法狀態(tài)機(jī)信息,執(zhí)行步驟A4;否則執(zhí)行步驟A2。所述的方法,其中,步驟A2中所述哈希鍵值,根據(jù)用戶的IP地址和 端口 、以及WAP網(wǎng)關(guān)的IP地址和端口 ,通過哈希算法計(jì)算得到。所述的方法,其中,步驟A2還包括以下步驟A21:判斷查詢結(jié)果超過 一個(gè)會(huì)話ID,則才艮據(jù)各會(huì)話ID所對應(yīng)會(huì)話的用戶的IP地址,查詢所述消 息所屬的用戶建立的會(huì)話,采用其會(huì)話ID。所述的方法,其中,采用多個(gè)會(huì)話元素中的會(huì)話信息作為鏈表,進(jìn)行 順序查詢所述消息所屬的用戶建立的會(huì)話。所述的方法,其中,根據(jù)各會(huì)話ID所對應(yīng)會(huì)話的用戶的IP地址和端 口,查詢所述消息所屬的用戶建立的會(huì)話。所述的方法,其中,步驟A4之后還執(zhí)行以下步驟A5:釋放所述消息 占用的方法狀態(tài)機(jī)信息數(shù)組的方法元素。采用上述方案,本發(fā)明通過數(shù)組固定分配內(nèi)存,將消息處理流程映射 到數(shù)組中,通過哈希(Hash)鍵值快速確定消息處理的狀態(tài)機(jī)的元素,解 決了動(dòng)態(tài)內(nèi)存分配方法頻繁對內(nèi)存申請釋放帶來的系統(tǒng)開銷,并且提高了 運(yùn)行效率,減少了所占用的存儲(chǔ)空間,避免了不方便判斷比較的缺陷;另 外使用數(shù)組存儲(chǔ)會(huì)話信息,每一個(gè)會(huì)話對應(yīng)一個(gè)手機(jī)用戶,'因此提高了同
時(shí)在線的手機(jī)用戶凄t量和WAP網(wǎng)關(guān)并發(fā)處理能力,乂人而提高WAP網(wǎng)關(guān)性 能和穩(wěn)定性。
圖1為本發(fā)明方法的手機(jī)用戶發(fā)送請求消息處理的工作流程示意圖; 圖2為本發(fā)明方法的WSP面向連接服務(wù)的數(shù)據(jù)處理結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例,對本發(fā)明進(jìn)行詳細(xì)說明。本發(fā)明通過采用數(shù)組的固定內(nèi)存分配方式,結(jié)合哈希查找算法對數(shù)據(jù) 包按手機(jī)用戶歸類處理,將數(shù)據(jù)包處理流程映射為兩級哈希查找,以達(dá)到 快速處理數(shù)據(jù)包的目的。因此,如圖1所示,本發(fā)明提供了一種基于無線 會(huì)話協(xié)議實(shí)現(xiàn)數(shù)據(jù)快速處理的方法,以下對其步驟進(jìn)行具體說明。Al、預(yù)建立卩合希索引數(shù)組、會(huì)話狀態(tài)機(jī)數(shù)組和方法狀態(tài)機(jī)數(shù)組;在建 立各數(shù)組時(shí),可以才艮據(jù)WAP網(wǎng)關(guān)的運(yùn)行能力,預(yù)設(shè)置所述哈希索引數(shù)組、 所述會(huì)話狀態(tài)機(jī)數(shù)組和所述方法狀態(tài)機(jī)數(shù)組的大小。哈希索引數(shù)組存儲(chǔ)會(huì)話ID,指向會(huì)話狀態(tài)機(jī)數(shù)組;會(huì)話狀態(tài)機(jī)數(shù)組存 儲(chǔ)會(huì)話信息, 一個(gè)會(huì)話信息可以指向方法狀態(tài)機(jī)數(shù)組的多個(gè)方法狀態(tài)機(jī)信 息。具體地說,所述的哈希索引數(shù)組中的元素存儲(chǔ)WAP網(wǎng)關(guān)和手機(jī)用戶建 立的會(huì)話ID;會(huì)話狀態(tài)機(jī)信息數(shù)組中的元素存儲(chǔ)手機(jī)和WAP網(wǎng)關(guān)建立的 會(huì)話信息;方法狀態(tài)機(jī)信息數(shù)組中存儲(chǔ)所屬會(huì)話的ID,以及當(dāng)前消息處理 的狀態(tài)才幾信 息o在步驟Al之后還可以執(zhí)行以下各步驟。All、判斷用戶上網(wǎng),為該用戶建立會(huì)話并創(chuàng)建所述會(huì)話信息;所述創(chuàng) 建所述會(huì)話信息包括,將所述會(huì)話信息存儲(chǔ)在所述會(huì)話狀態(tài)機(jī)數(shù)組的某一 會(huì)話元素,并將所述會(huì)話元素的下標(biāo)作為會(huì)話ID,存儲(chǔ)在所述哈希索引數(shù)組。A12、判斷所述用戶上網(wǎng)收發(fā)消息,為每次交互的消息創(chuàng)建方法狀態(tài)機(jī)信息;、所述創(chuàng)建方法狀態(tài)機(jī)信息包括,將當(dāng)前交互的消息所處理的方法狀 態(tài)機(jī)信息及其所屬會(huì)話的會(huì)話ID,存儲(chǔ)在所述方法狀態(tài)機(jī)數(shù)組的某一方法 元素,即通過相應(yīng)的處理,將所述會(huì)話ID相同的方法元素和會(huì)話元素相關(guān) 聯(lián)。之后還可以包括以下步驟定期檢查所述會(huì)話狀態(tài)機(jī)數(shù)組,清理超時(shí) 的會(huì)譯元素;可以按系統(tǒng)管理者預(yù)設(shè)的時(shí)間定期清理,例如,使用定時(shí)器 模塊定期檢查會(huì)話狀態(tài)機(jī)信息數(shù)組的元素,清理超時(shí)的會(huì)話。A13、判斷所述用戶結(jié)束上網(wǎng)或者超時(shí)未操作,則斷開所述會(huì)話,釋放 其占用的所述方法狀態(tài)機(jī)數(shù)組的方法元素、所述會(huì)話狀態(tài)機(jī)數(shù)組的會(huì)話元 素、所述哈希索引數(shù)組的索引元素。當(dāng)手機(jī)下線或者超時(shí)網(wǎng)關(guān)主動(dòng)斷開會(huì) 話,首先釋放會(huì)話所屬的占用方法狀態(tài)機(jī)信息元素,再釋放被占用的會(huì)話 狀態(tài)機(jī)信息元素,相應(yīng)的哈希索? 1數(shù)組中對應(yīng)的元素也要釋放掉。需要說明的是,上述各步驟All、 A12和A13可以分別獨(dú)立執(zhí)行,也 可以按預(yù)設(shè)置順序執(zhí)行,例如,先執(zhí)行Alll、再執(zhí)行A12,然后執(zhí)行A13。A2、從消息隊(duì)列中獲取用戶請求消息,計(jì)算其哈希鍵值(KeyValue), 在所述哈希索引數(shù)組中,查詢是否存在所述消息的會(huì)話ID,否則為該用戶 建立會(huì)話并創(chuàng)建所述會(huì)話信息;創(chuàng)建所述會(huì)話信息如上所述。其中,所述 哈希鍵值,可以根據(jù)用戶的IP地址和端口 、以及WAP網(wǎng)關(guān)的IP地址和端 口,通過哈希算法計(jì)算得到。一個(gè)實(shí)施例可以是,步驟A2還包括以下步驟A21:判斷查詢結(jié)果超過 一個(gè)會(huì)話ID,則根據(jù)各會(huì)話ID所對應(yīng)會(huì)話的用戶的IP地址,查詢所述消 息所屬的用戶建立的會(huì)話,采用其會(huì)話ID。例如,采用多個(gè)會(huì)話元素中的 會(huì)話信息作為鏈表,進(jìn)行順序查詢所述消息所屬的用戶建立的會(huì)話。又如, 根據(jù)各會(huì)話ID所對應(yīng)會(huì)話的用戶的IP地址和端口 ,查詢所述消息所屬的 用戶建立的會(huì)話。 '
即,在出現(xiàn)哈希沖突時(shí),例如一個(gè)KEY值對應(yīng)多個(gè)會(huì)話,可以將多個(gè) 會(huì)話信息元素設(shè)計(jì)為鏈表順序查詢,比較手機(jī)用戶的IP地址,或者比較手 機(jī)用戶的IP地址和端口,直到找出該手機(jī)用戶建立的會(huì)話。手機(jī)用戶在某 一時(shí)刻,可能發(fā)送多個(gè)請求方法, 一個(gè)會(huì)話同樣可以對應(yīng)多個(gè)方法狀態(tài)機(jī) 信息,將方法狀態(tài)機(jī)信息數(shù)組元素同樣也設(shè)計(jì)為鏈表式查詢,根據(jù)消息中 攜帶的服務(wù)標(biāo)志找到手機(jī)請求的方法狀態(tài)機(jī)信息元素。另 一個(gè)實(shí)施例可以是采用網(wǎng)關(guān)分配的方法狀態(tài)機(jī)ID作為所述方法元素 的下標(biāo),此時(shí),步驟A2之前還執(zhí)行以下步驟A20:網(wǎng)關(guān)判斷所述消息為服 務(wù)器返回的消息并具有所述方法狀態(tài)機(jī)ID,則在方法狀態(tài)機(jī)信息數(shù)組中查 找所述消息的方法狀態(tài)機(jī)信息,執(zhí)行步驟A4;否則執(zhí)行步驟A2。即可以 對服務(wù)器返回的消息進(jìn)行快速處理。A3、根據(jù)所述消息的會(huì)話ID,在所述方法狀態(tài)機(jī)數(shù)組中,查詢是否存 在所述會(huì)話ID對應(yīng)的方法狀態(tài)機(jī)信息,否則為所述消息創(chuàng)建方法狀態(tài)機(jī)信 息;創(chuàng)建方法狀態(tài)^M言息如上所述。A4、根據(jù)所述消息及其方法狀態(tài)機(jī)信息進(jìn)行數(shù)據(jù)處理,并更新所述方 法狀態(tài)機(jī)數(shù)組中存儲(chǔ)的方法狀態(tài)機(jī)信息。更好的是,在本發(fā)明所述的任一實(shí)施例中,在步驟A4之后還可以執(zhí)行 以下步驟A5:釋》文所述消息占用的方法狀態(tài)機(jī)信息數(shù)組的方法元素。例如,簡單的說,本發(fā)明提供了一種無線會(huì)話協(xié)議下的數(shù)據(jù)快速處理 方法,包括以下關(guān)鍵步驟,A. 創(chuàng)建一個(gè)哈希索引數(shù)組, 一個(gè)會(huì)話狀態(tài)機(jī)信息數(shù)組(即會(huì)話狀態(tài)機(jī) 數(shù)組)以及一個(gè)方法狀態(tài)機(jī)信息數(shù)組(即方法狀態(tài)機(jī)數(shù)組)。B. 獲取WSP模塊中的消息隊(duì)列中的消息,并對該消息進(jìn)行哈希操作, 計(jì)算一個(gè)哈希KEY值,所述的哈希KEY值,可以通過手機(jī)用戶的IP地址、 端口和WAP網(wǎng)關(guān)的IP地址、端口通過哈希算法計(jì)算而得。C. 手機(jī)一上線則建立一個(gè)會(huì)話,占用會(huì)話狀態(tài)機(jī)信息數(shù)組中的一個(gè)元素存儲(chǔ)會(huì)話狀態(tài)機(jī)信息,相應(yīng)占用哈希索引數(shù)組一個(gè)元素存儲(chǔ)會(huì)話ID。當(dāng)WSP收到底層發(fā)來的請求消息時(shí),根據(jù)哈希KEY值在對應(yīng)的哈希索引數(shù)組 中查詢是否存在手機(jī)和WAP網(wǎng)關(guān)建立的會(huì)話ID,如果存在會(huì)話ID,則執(zhí) 行D;如果不存在,則新創(chuàng)建一個(gè)會(huì)話,再纟丸行D。D. 在線手機(jī)發(fā)送一個(gè)PULL或者接收收一個(gè)PUSH消息,'則會(huì)占用方 法狀態(tài)機(jī)數(shù)組的 一 個(gè)元素存儲(chǔ)方法狀態(tài)機(jī)的信息,并把這一方法狀態(tài)機(jī)元 素和所屬的會(huì)話狀態(tài)機(jī)信息數(shù)組元素相關(guān)聯(lián),即設(shè)置相同的下標(biāo)。當(dāng)WSP 在會(huì)話建立后收到請求消息,則根據(jù)相關(guān)的會(huì)話信息在方法狀態(tài)機(jī)信息數(shù) 組中查找手機(jī)用戶請求的方法狀態(tài)機(jī)信息數(shù)組元素是否有方法狀態(tài)機(jī)信 息,沒有找到則創(chuàng)建一個(gè)方法狀態(tài)機(jī)信息。E. 根據(jù)接收到的請求消息和找到的手機(jī)請求方法狀態(tài)機(jī)信息數(shù)組元 素,處理手機(jī)請求消息,更新這個(gè)狀態(tài)機(jī)信息數(shù)組元素中存儲(chǔ)的信息。還可以包括WAP網(wǎng)關(guān)收到服務(wù)器相應(yīng)消息的處理方法,執(zhí)行以下步驟F. 根據(jù)服務(wù)器返回的消息攜帶的狀態(tài)機(jī)信息ID,直接在方法狀態(tài)機(jī)信 息數(shù)組中查找,處理收到的消息,記錄狀態(tài)機(jī)新的信息到狀態(tài)機(jī)信息數(shù)組 元素中。G. 當(dāng)方法狀態(tài)^L流程處理結(jié)束后,則釋力欠占用的方法狀態(tài)機(jī)信息數(shù)組 的元素。以下結(jié)合圖1,對本發(fā)明提供的方法,進(jìn)行詳細(xì)說明,手機(jī)用戶發(fā)送請 消息處理的工作流程,采用本發(fā)明方法進(jìn)^f亍處理時(shí),、可以包括如下步驟。 步驟100:開始執(zhí)行本發(fā)明方法。步驟101:創(chuàng)建一個(gè)哈希索引數(shù)組, 一個(gè)會(huì)話狀態(tài)機(jī)信息數(shù)組以及一個(gè) 方法狀態(tài)才幾信息數(shù)組。a) WAP網(wǎng)關(guān)為每個(gè)上線手機(jī)用戶分配一個(gè)會(huì)話,每個(gè)會(huì)話ID對應(yīng)哈 希索引數(shù)組的一個(gè)元素。b) 會(huì)話狀態(tài)機(jī)信息數(shù)組的元素存儲(chǔ)手機(jī)用戶和WAP網(wǎng)關(guān)建立起的會(huì) 話,每個(gè)會(huì)話數(shù)組元素對應(yīng)一個(gè)手機(jī)上線用戶。C)方法狀態(tài)機(jī)信息數(shù)組存儲(chǔ)當(dāng)前手機(jī)請求消息處理的狀態(tài)機(jī)信息,每 個(gè)方法狀態(tài)才幾數(shù)組元素對應(yīng)手機(jī)用戶和應(yīng)用月良務(wù)器之間的 一次交互。同時(shí)存儲(chǔ)所屬的會(huì)話ID,即圖2所示的各session。d)各數(shù)組的大小可以根據(jù)運(yùn)營商明確規(guī)定的WAP網(wǎng)關(guān)現(xiàn)網(wǎng)運(yùn)行能力而定。步驟102:從消息隊(duì)列中讀取用戶的請求消息,消息中標(biāo)志手機(jī)用戶身 份的參數(shù)是手機(jī)的IP地址和端口 ,根據(jù)WAP網(wǎng)關(guān)地址端口和手機(jī)用戶地 址端口進(jìn)行哈希操作,計(jì)算哈希KEY值。KEY值對應(yīng)哈希索引表的下標(biāo)。步驟103:根據(jù)KEY值到哈希索引表(即哈希索引數(shù)組)查找第KEY 個(gè)元素中是否存在會(huì)話信息,例如,KEY值為17,則到哈希索引表查找第 17個(gè)元素是否存在會(huì)話信息,不存在轉(zhuǎn)到步驟104,存在則轉(zhuǎn)到步驟105。步驟104:在會(huì)話狀態(tài)機(jī)信息數(shù)組中找到一個(gè)空的元素,建立WAP網(wǎng) 關(guān)和此手機(jī)用戶的會(huì)話,并把會(huì)話信息存儲(chǔ)在這個(gè)空元素中,并這個(gè)元素 的下表作為會(huì)話ID,同時(shí)存儲(chǔ)會(huì)話ID到索引表中第KEY個(gè)元素中,和哈 希索引數(shù)組關(guān)聯(lián)起來。如果會(huì)話狀態(tài)機(jī)信息數(shù)組中沒有空的元素,則拒絕 和這個(gè)手機(jī)用戶建立會(huì)話。步驟105:當(dāng)手才幾用戶和WAP網(wǎng)關(guān)建立起會(huì)話后,手才幾發(fā)送一個(gè)PULL 消息或者接受一個(gè)PUSH消息,判斷所屬會(huì)話下是否存在手機(jī)請求方法的 方法狀態(tài)機(jī)信息,不存在轉(zhuǎn)到步驟106,存在則轉(zhuǎn)到107。對沒有建立起會(huì)話,手機(jī)就發(fā)起的方法請求消息,WAP網(wǎng)關(guān)可以直接 拋棄。步驟106,查找方法狀態(tài)機(jī)信息數(shù)組的空余元素,建立一個(gè)手機(jī)用戶請 求方法的狀態(tài)機(jī)信息元素,方法狀態(tài)機(jī)信息數(shù)組的下標(biāo)記為WAP網(wǎng)關(guān)分配 的方法狀態(tài)機(jī)ID,這個(gè)元素空間存儲(chǔ)相關(guān)的方法狀態(tài)機(jī)信息,并保存所屬 會(huì)話的ID,與所屬的會(huì)話狀態(tài)機(jī)信息數(shù)組元素關(guān)聯(lián)起來。如果當(dāng)收到用戶
請求方法,方法狀態(tài)機(jī)信息數(shù)組中沒有空余的元素,則wap網(wǎng)關(guān)直接拋棄 此請求消息。步驟107:根據(jù)接收到的請求消息和找到的手機(jī)請求方法狀態(tài)機(jī)信息數(shù) 組元素,處理手機(jī)請求消息,更新這個(gè)狀態(tài)機(jī)信息數(shù)組元素中存儲(chǔ)的信息。wap網(wǎng)關(guān)對應(yīng)用月良務(wù)器返回的響應(yīng)消息處理,^T艮據(jù)響應(yīng)消息中攜帶的 方法狀態(tài)機(jī)id,直接在方法狀態(tài)機(jī)信息數(shù)組中查找,找到請求方法信息元 素后處理收到的響應(yīng)消息,記錄狀態(tài)機(jī)新的信息:到狀態(tài)機(jī)信息數(shù)組元素中。 當(dāng)方法狀態(tài)機(jī)流程處理結(jié)束后,則釋放占用的方法狀態(tài)機(jī)信息數(shù)組的元素。 當(dāng)所屬會(huì)話下所有的方法狀態(tài)機(jī)處理完成后,則釋放占用的會(huì)話狀態(tài)機(jī)信 息數(shù)組的元素,以備其他所用。同時(shí)可以使用定時(shí)器周期檢查會(huì)話信息數(shù) 組,清理超時(shí)的會(huì)話。步驟108:結(jié)束執(zhí)行本發(fā)明方法。如圖2所示,其包括了各數(shù)組的結(jié)構(gòu)示意圖,以下結(jié)合圖2對本發(fā)明 為無線會(huì)話協(xié)議進(jìn)行數(shù)據(jù)處理進(jìn)一步解釋。步驟201:無線會(huì)話協(xié)議提供一個(gè)消息隊(duì)列接受所有的消息,無論消息 是終端的還是服務(wù)器端的,統(tǒng)一存放到消息隊(duì)列,手機(jī)發(fā)送的請求消息以 手機(jī)和wap網(wǎng)關(guān)的ip地址端口組成的地址對作為標(biāo)志,服務(wù)器返回的響 應(yīng)消息以方法狀態(tài)才幾id為標(biāo)志。wap網(wǎng)關(guān)從消息隊(duì)列獲取消息,判斷此消息是客戶端的還是服務(wù)器端 的,客戶端的消息可以通過ip地址和端口經(jīng)哈希操作查找方法狀態(tài)機(jī),而 服務(wù)器端可以根據(jù)方法狀態(tài)機(jī)id直接到中查詢。步驟202:哈希索引數(shù)組中的元素存儲(chǔ)會(huì)話id,當(dāng)收到用戶的請求消 息時(shí),對手機(jī)的ip地址和端口 、以及wap網(wǎng)關(guān)的ip地址和端口進(jìn)行哈希 操作,計(jì)算出一個(gè)哈希key值。key值表示哈希索引數(shù)組的下標(biāo),直接在 哈希索引數(shù)組中查找是否存已經(jīng)建立的會(huì)話id。由于哈希索引數(shù)組是靜態(tài)分配的,所以根據(jù)數(shù)組的最大元素個(gè)數(shù)對key值取余。這樣可能出現(xiàn)哈希
沖突,索引表中會(huì)話ID并不能表示是這個(gè)手機(jī)用戶建立的會(huì)話ID。因此必要時(shí),還需在會(huì)話狀態(tài)機(jī)信息數(shù)組中作鏈表順序查找。如圖2所示的會(huì)話狀態(tài)機(jī)信息數(shù)組中,用戶[1](即會(huì)話[1]、會(huì)話ID[1]) 的KEY值為l,其對應(yīng)哈希索引數(shù)組的索引[l],方法狀態(tài)機(jī)信息數(shù)組的方 法[O],步驟203:手才幾每一上線就和WAP網(wǎng)關(guān)建立一個(gè)會(huì)話,將會(huì)話狀態(tài)機(jī) 信息數(shù)組的下標(biāo)分配給每一個(gè)會(huì)話ID,這個(gè)會(huì)話ID存儲(chǔ)哈希索引數(shù)組中, 當(dāng)在哈希索? 1數(shù)組中找到這個(gè)會(huì)話ID時(shí)直接到會(huì)話狀態(tài)機(jī)信息數(shù)組中查找 建立的會(huì)話。對于哈希沖突的現(xiàn)象,如圖2中哈希KEY值為17時(shí),對應(yīng) 了3個(gè)會(huì)話,包括Session:28、 Session:14、 Session:0 (即會(huì)話ID );當(dāng)WAP 網(wǎng)關(guān)收到手機(jī)請求消息后,從哈希索引數(shù)組中首先找到會(huì)話28,然后對這 三個(gè)會(huì)話28、 14、 0所組成的鏈表進(jìn)行查找,例如作順序查找。查找條件 可以為手才幾的IP地址和端口 ,也可以僅為手才幾的IP地址;因?yàn)槊總€(gè)手才幾上 線時(shí),WAP網(wǎng)關(guān)會(huì)為它分配一個(gè)唯一的IP地址。如果沒有找到,則創(chuàng)建一 個(gè)新會(huì)話,鏈接到會(huì)話0后面,組成4個(gè)元素的鏈表。步驟204:手才幾和WAP網(wǎng)關(guān)建立起會(huì)話后,手機(jī)開始和服務(wù)器交換數(shù) 據(jù),通過PULL或者PUSH方法。方法狀態(tài)機(jī)數(shù)組下標(biāo)分配為方法狀態(tài)機(jī) ID,在會(huì)話信息數(shù)組中查到狀態(tài)機(jī)ID,就可直接查找到方法狀態(tài)機(jī)數(shù)組中 元素。每個(gè)會(huì)話可能對應(yīng)多個(gè)方法,所以所屬會(huì)話相同的方法狀態(tài)機(jī)元素 也可以組成鏈表作順序查找。本發(fā)明對各種查找方法并無限制。應(yīng)當(dāng)理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以 改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù) 范圍。
權(quán)利要求
1、一種基于無線會(huì)話協(xié)議實(shí)現(xiàn)數(shù)據(jù)快速處理的方法,其包括以下步驟A1、預(yù)建立哈希索引教組、會(huì)話狀態(tài)機(jī)數(shù)組和方法狀態(tài)機(jī)數(shù)組;A2、從消息隊(duì)列中獲取用戶請求消息,計(jì)算其哈希鍵值,在所述哈希索引數(shù)組中,查詢是否存在所述消息的會(huì)話ID,否則為該用戶建立會(huì)話并創(chuàng)建所述會(huì)話信息;A3、根據(jù)所述消息的會(huì)話ID,在所述方法狀態(tài)機(jī)數(shù)組中,查詢是否存在所述會(huì)話ID對應(yīng)的方法狀態(tài)機(jī)信息,否則為所述消息創(chuàng)建方法狀態(tài)機(jī)信息;A4、根據(jù)所述消息及其方法狀態(tài)機(jī)信息進(jìn)行數(shù)據(jù)處理,并更新所述方法狀態(tài)機(jī)數(shù)組中存儲(chǔ)的方法狀態(tài)機(jī)信息。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A1之后還執(zhí)行 以下步驟All、判斷用戶上網(wǎng),則為該用戶建立會(huì)話并創(chuàng)建所述會(huì)話信息;創(chuàng) 建所述會(huì)話信息包括,將所述會(huì)話信息存儲(chǔ)在所述會(huì)話狀態(tài)機(jī)數(shù)組的某 一會(huì)話元素,并將所述會(huì)話元素的下標(biāo)作為會(huì)話ID,存儲(chǔ)在所述^^合希索 引數(shù)組;或者,A12、判斷所述用戶上網(wǎng)收發(fā)消息,則為每次交互的消息創(chuàng)建方法 狀態(tài)機(jī)信息;創(chuàng)建方法狀態(tài)機(jī)信息包括,將當(dāng)前交互的消息所處理的方 法狀態(tài)機(jī)信息及其所屬會(huì)話的會(huì)話ID,存儲(chǔ)在所述方法狀態(tài)機(jī)數(shù)組的某 一方法元素;或者,A13、判斷所述用戶結(jié)束上網(wǎng)或者超時(shí)未操作,則斷開所述會(huì)話, 釋放其占用的所述方法狀態(tài)機(jī)數(shù)組的方法元素、所述會(huì)話狀態(tài)機(jī)數(shù)組的 會(huì)話元素、所述哈希索引數(shù)組的索引元素。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,步驟A12之后還包括 以下步驟定期4企查所述會(huì)話狀態(tài)機(jī)數(shù)組,清理超時(shí)的會(huì)話元素。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,根據(jù)WAP網(wǎng)關(guān)的運(yùn) 行能力,預(yù)設(shè)置所述哈希索引數(shù)組、所述會(huì)話狀態(tài)機(jī)數(shù)組和所述方法狀態(tài) 才幾凄t組的大小。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法元素的下標(biāo) 為網(wǎng)關(guān)分配的方法狀態(tài)積iID;并且,步驟A2之前還執(zhí)行以下步驟A20:網(wǎng)關(guān)判斷所述消息為服務(wù)器返 回的消息并具有所述方法狀態(tài)機(jī)ID,則在方法狀態(tài)機(jī)信息數(shù)組中查找所 述消息的方法狀態(tài)機(jī)信息,執(zhí)行步驟A4;否則執(zhí)行步驟A2。
6、 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A2中所述哈希 鍵值,根據(jù)用戶的IP地址和端口 、以及WAP網(wǎng)關(guān)的IP地址和端口 ,通過 哈希算法計(jì)算得到。
7、 根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A2還包括以下 步驟A21:判斷查詢結(jié)果超過一個(gè)會(huì)話ID,則根據(jù)各會(huì)話ID所對應(yīng)會(huì)話的 用戶的IP地址,查詢所述消息所屬的用戶建立的會(huì)話,采用其會(huì)話ID。
8、 根據(jù)權(quán)利要求7所述的方法,其特征在于,采用多個(gè)會(huì)話元素中 的會(huì)話信息作為鏈表,進(jìn)行順序查詢所述消息所屬的用戶建立的會(huì)話。
9、 根據(jù)權(quán)利要求7所述的方法,其特征在于,根據(jù)各會(huì)話ID所對 應(yīng)會(huì)話的用戶的IP地址和端口,查詢所述消息所屬的用戶建立的會(huì)話。
10、 根據(jù)權(quán)利要求1至9任一所述的方法,其特征在于,步驟A4之 后還執(zhí)行以下步驟A5:釋放所述消息占用的方法狀態(tài)機(jī)信息數(shù)組的方法元 素。
全文摘要
本發(fā)明公開了一種基于無線會(huì)話協(xié)議實(shí)現(xiàn)數(shù)據(jù)快速處理的方法,其包括以下步驟預(yù)建立哈希索引數(shù)組、會(huì)話狀態(tài)機(jī)數(shù)組和方法狀態(tài)機(jī)數(shù)組;從消息隊(duì)列中獲取用戶請求消息,計(jì)算其哈希鍵值,在哈希索引數(shù)組中,查詢是否存在消息的會(huì)話ID,否則為該用戶建立會(huì)話并創(chuàng)建會(huì)話信息;根據(jù)消息的會(huì)話ID,在方法狀態(tài)機(jī)數(shù)組中,查詢是否存在會(huì)話ID對應(yīng)的方法狀態(tài)機(jī)信息,否則為消息創(chuàng)建方法狀態(tài)機(jī)信息;根據(jù)消息及其方法狀態(tài)機(jī)信息進(jìn)行數(shù)據(jù)處理,更新方法狀態(tài)機(jī)數(shù)組中存儲(chǔ)的方法狀態(tài)機(jī)信息。從而提高了運(yùn)行效率,減少了存儲(chǔ)空間,避免了不方便判斷比較的缺陷;提高了同時(shí)在線的手機(jī)用戶數(shù)量和WAP網(wǎng)關(guān)并發(fā)處理能力,從而提高WAP網(wǎng)關(guān)性能和穩(wěn)定性。
文檔編號(hào)H04L29/06GK101163141SQ200710124720
公開日2008年4月16日 申請日期2007年11月12日 優(yōu)先權(quán)日2007年11月12日
發(fā)明者史永奇, 吳麗梅, 申凌海 申請人:中興通訊股份有限公司