亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

處理異步消息隊(duì)列的方法、系統(tǒng)和異步socket的制作方法

文檔序號(hào):7649571閱讀:304來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):處理異步消息隊(duì)列的方法、系統(tǒng)和異步socket的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信技術(shù)領(lǐng)域,具體的特別涉及一種處理異步消息隊(duì) 列的方法、系統(tǒng)和異步SOCKET。
背景技術(shù)
SOCKET (套接字)是一個(gè)通信鏈的句柄,用于描述IP地址和端 口 ,應(yīng)用程序通常通過(guò)SOCKET向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。 SOCKET在網(wǎng)絡(luò)通信中的重要性越來(lái)越大,現(xiàn)有的BGP (邊緣網(wǎng)關(guān)協(xié) 議)、LDP (標(biāo)簽分發(fā)協(xié)議)、OSPF (內(nèi)部網(wǎng)關(guān)協(xié)議)、ISIS (鏈路狀 態(tài)協(xié)議)等路由協(xié)議,以及TELNET (TCP/IP終端仿真協(xié)議)、FTP (文件傳輸協(xié)議)、HTTP (超文本傳輸協(xié)議)等網(wǎng)絡(luò)傳輸協(xié)議都依托 于SOCKET提供的接口完成與底層之間的數(shù)據(jù)交互?,F(xiàn)有路由協(xié)議通常采用異步SOCKET實(shí)現(xiàn)上層協(xié)議和底層之間 的數(shù)據(jù)承栽。異步SOCKET采用消息機(jī)制,這種消息機(jī)制在時(shí)間上將 數(shù)據(jù)與事件分離?,F(xiàn)有異步消息隊(duì)列的處理流程如圖l所示 步驟101:異步SOCKET接收底層傳輸?shù)臄?shù)據(jù)。 底層傳送到異步SOCKET的數(shù)據(jù)在被上層協(xié)議讀取之前,存放于 該異步SOCKET的接收緩存中。步驟102:異步SOCKET向異步消息隊(duì)列中寫(xiě)入異步讀消息。 異步SOCKET將接收到的底層數(shù)據(jù)存放于接收緩存中,同時(shí)以寫(xiě) 讀事件位的方式告知上層協(xié)議"有數(shù)據(jù)到達(dá),,,同時(shí)將異步讀消息寫(xiě)入 異步消息隊(duì)列中。在異步SOCKET的實(shí)現(xiàn)中,SOCKET使用的異步消 息隊(duì)列由路由管理器創(chuàng)建并維護(hù),該異步消息隊(duì)列的入口為SOCKET 的異步消息,出口為上層協(xié)議的讀取。步驟103:上層協(xié)議從異步SOCKET接收緩存中讀取數(shù)據(jù)。 上層協(xié)議接收并讀取異步讀消息后,可以根據(jù)該消息內(nèi)的字段, 識(shí)別相應(yīng)的異步SOCKET和與該異步SOCKET桂接的上層協(xié)議,若該異步SOCKET與當(dāng)前上層協(xié)議匹配,則該上層協(xié)議調(diào)用異步 SOCKET的讀取接口讀取該異步SOCKET接收緩存中的數(shù)據(jù)。現(xiàn)有異步讀消息上報(bào)示意圖如圖2所示其中,異步SOCKET在 接收到底層數(shù)據(jù)后,在異步SOCKET內(nèi)部以異步讀事件加異步讀消息 的方式通知上層協(xié)議,上層協(xié)議確認(rèn)異步讀事件后,再讀取異步讀消 息,然后根據(jù)該消息的類(lèi)型對(duì)讀取的底層數(shù)據(jù)做相應(yīng)的處理。圖2中 異步SOCKET的異步消息隊(duì)列操作與異步SOCKET接收到的數(shù)據(jù)一 一對(duì)應(yīng),即每接收到 一 次底層數(shù)據(jù)就相應(yīng)的向異步消息隊(duì)列中寫(xiě)入一 次異步讀消息。現(xiàn)有的異步消息隊(duì)列處理方法,以及異步事件消息的上報(bào)機(jī)制雖 然清晰地表達(dá)了 "接收數(shù)據(jù)-通知協(xié)議"的過(guò)程,但在實(shí)際應(yīng)用中, 這種機(jī)制會(huì)引發(fā)大量的空閑異步讀消息占用異步消息的隊(duì)列資源,特 別當(dāng)異步SOCKET接收數(shù)據(jù)頻繁時(shí)尤其突出。首先,由于異步SOCKET頻繁接收來(lái)自底層的報(bào)文數(shù)據(jù),同時(shí)向 異步消息隊(duì)列中寫(xiě)入大量的異步讀消息,當(dāng)網(wǎng)絡(luò)中路由協(xié)議在初始導(dǎo) 入大量路由,或者當(dāng)網(wǎng)絡(luò)中產(chǎn)生路由振蕩時(shí),若上層協(xié)議處理相應(yīng)報(bào) 文數(shù)據(jù)的速度稍微減慢,則極有可能造成異步消息隊(duì)列中的資源爆滿(mǎn), 從而導(dǎo)致異步SOCKET丟失報(bào)文數(shù)據(jù)。其次,上層路由協(xié)議在接收到異步SOCKET寫(xiě)入的一個(gè)異步讀消 息時(shí), 一次讀完異步SOCKET接收緩存。當(dāng)異步SOCKET連續(xù)接收 完幾個(gè)底層報(bào)文數(shù)據(jù),并寫(xiě)入相應(yīng)多的異步讀消息,而上層路由協(xié)議 在得到第 一個(gè)異步讀消息時(shí),就一次性讀完了異步SOCKET接收援存 中的所有報(bào)文數(shù)據(jù),則剩下的異步讀消息就會(huì)觸發(fā)大量的上層路由協(xié) 議空讀。再次,當(dāng)多個(gè)上層路由協(xié)議與異步SOCKET建立連接時(shí),每個(gè)路 由協(xié)議都會(huì)產(chǎn)生大量的異步讀消息。在一個(gè)時(shí)間范圍內(nèi),異步消息隊(duì) 列被其中 一部分路由協(xié)議的消息占據(jù),剩余的路由協(xié)議由于異步消息 隊(duì)列已滿(mǎn)而無(wú)法成功寫(xiě)消息。在這種情況下若丟棄報(bào)文就會(huì)造成路由 數(shù)據(jù)丟失;若盡最大可能保留報(bào)文數(shù)據(jù),則由于長(zhǎng)時(shí)間無(wú)法寫(xiě)異步讀消息,當(dāng)異步SOCKET接收緩存滿(mǎn)后,就再也不會(huì)通知異步讀消息, 從而造成異步SOCKET中的緩存堆積。發(fā)明內(nèi)容本發(fā)明的實(shí)施例提供 一 種處理異步消息隊(duì)列的方法,以解決現(xiàn)有 技術(shù)中由于重復(fù)向異步消息隊(duì)列中寫(xiě)入異步讀消息,容易造成異步消 息隊(duì)列中資源爆滿(mǎn),異步讀消息觸發(fā)大量的上層路由協(xié)議空讀, S O C KE T丟失報(bào)文數(shù)據(jù),從而導(dǎo)致網(wǎng)絡(luò)中路由信息丟失的問(wèn)題。本發(fā)明的另 一 實(shí)施例提供 一 種處理異步消息隊(duì)列的系統(tǒng),以解決 現(xiàn)有技術(shù)中重復(fù)向異步消息隊(duì)列中寫(xiě)入異步讀消息,容易造成隊(duì)列中 資源爆滿(mǎn),報(bào)文丟失的問(wèn)題。本發(fā)明的又一實(shí)施例提供一種異步SOCKET,以解決現(xiàn)有技術(shù)中 異步SOCKET重復(fù)向異步消息隊(duì)列中寫(xiě)入異步讀消息的問(wèn)題。為解決上述問(wèn)題,本發(fā)明的實(shí)施例提供如下技術(shù)方案一種處理異步消息隊(duì)列的方法,包括步驟A、 異步SOCKET將接收到的底層數(shù)據(jù)放入接收緩存,判斷異步 消息隊(duì)列中是否有未讀取的異步讀消息,如果異步消息隊(duì)列中沒(méi)有未 讀取的異步讀消息,則向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息,執(zhí)行步驟B,如果異步消息隊(duì)列中有未讀取的異步讀消息,則執(zhí)行步驟 B;B、 上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后,從異步 SOCKET接收緩存中讀取底層數(shù)據(jù)。一種處理異步消息隊(duì)列的系統(tǒng),所述系統(tǒng)包括底層數(shù)據(jù)模塊、 上層協(xié)議模塊以及連接底層數(shù)據(jù)模塊和上層協(xié)議模塊的異步SOCKET 模塊,所述異步SOCKET模塊包括接收緩存模塊,接收并存放所述底層數(shù)據(jù)模塊發(fā)送的數(shù)據(jù); 判斷異步讀消息模塊,用于判斷異步消息隊(duì)列中是否有未讀取的 異步讀消息;消息時(shí),向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息; 所述上層協(xié)議模塊包括讀異步讀消息模塊,用于讀取所述異步消息隊(duì)列中寫(xiě)入的異步讀 消息;讀取數(shù)據(jù)模塊,用于從所述接收緩存模塊中讀取底層數(shù)據(jù)。 一種異步SOCKET,包括 接收緩存模塊,用于存放接收到的底層數(shù)據(jù); 判斷異步讀消息模塊,用于判斷異步消息隊(duì)列中是否有未讀取的 異步讀消息;寫(xiě)異步讀消息模塊,用于當(dāng)異步消息隊(duì)列中沒(méi)有未讀取的異步讀 消息時(shí),向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息。由以上本發(fā)明提供的實(shí)施例可見(jiàn),本發(fā)明異步SOCKET在一段時(shí) 間內(nèi)連續(xù)接收到底層數(shù)據(jù)后,只向異步消息隊(duì)列中寫(xiě)入 一 個(gè)異步讀消 息,當(dāng)多個(gè)上層路由協(xié)議與異步SOCKET建立連接時(shí),由于每個(gè)上層 路由協(xié)議只對(duì)應(yīng)各自寫(xiě)入的一個(gè)異步讀消息,因此極大減少了異步讀 消息對(duì)異步消息隊(duì)列空間的占用,提高了上層協(xié)議處理相應(yīng)報(bào)文數(shù)據(jù) 的速度,不會(huì)造成異步消息隊(duì)列中資源的浪費(fèi),避免了初始導(dǎo)入大量 路由或者路由振蕩時(shí),因異步消息隊(duì)列滿(mǎn)載而丟失數(shù)據(jù)的情況發(fā)生, 提高了網(wǎng)絡(luò)中路由器的處理效率,增強(qiáng)了網(wǎng)絡(luò)的健壯性。附困說(shuō)明圖l為現(xiàn)有技術(shù)中處理異步消息隊(duì)列的流程圖;圖2為現(xiàn)有技術(shù)中異步讀消息上報(bào)示意圖;圖3為本發(fā)明處理異步消息隊(duì)列的方法流程圖;圖4為本發(fā)明第一實(shí)施例流程圖;圖5為本發(fā)明異步讀消息上報(bào)示意圖;圖6本發(fā)明第二實(shí)施例流程圖;圖7本發(fā)明第三實(shí)施例流程圖;圖8本發(fā)明第四實(shí)施例流程圖;圖9為本發(fā)明處理異步消息隊(duì)列系統(tǒng)的框圖;

圖10為本發(fā)明異步SOCKET—個(gè)實(shí)施例的框圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖 和實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。在異步SOCKET的實(shí)現(xiàn)過(guò)程中,異步SOCKET使用的異步消息 隊(duì)列由路由管理器創(chuàng)建和維護(hù),該異步消息隊(duì)列的入口為異步 SOCKET的異步讀消息,出口為上層協(xié)議的讀取。當(dāng)異步SOCKET從 底層接收到數(shù)據(jù)后,將數(shù)據(jù)桂栽在接收緩存中,在該異步SOCKET調(diào) 用異步消息隊(duì)列的過(guò)程中要分別進(jìn)行異步讀事件和異步讀消息的處 理。其中,異步讀事件是在調(diào)用異步消息隊(duì)列寫(xiě)操作中,對(duì)相應(yīng)任務(wù) 的讀事件位置位;異步讀消息是一個(gè)結(jié)構(gòu)體,記錄了相應(yīng)的異步 SOCKET和任務(wù)信息,當(dāng)異步SOCKET接收到底層數(shù)據(jù)后,在異步讀 事件位置位后,將該異步讀消息寫(xiě)入異步消息隊(duì)列中,供上層協(xié)議獲 取該異步讀消息并執(zhí)行相應(yīng)的任務(wù)。本發(fā)明處理異步消息隊(duì)列的方法流程如圖3所示步驟301:異步SOCKET將接收到的底層數(shù)據(jù)放入接收緩存,判 斷異步消息隊(duì)列中是否有未讀取的異步讀消息,如果異步消息隊(duì)列中 沒(méi)有未讀取的異步讀消息則向該異步消息隊(duì)列中寫(xiě)入一異步讀消息, 執(zhí)行步驟302,如果異步消息隊(duì)列中有未讀取的異步讀消息則執(zhí)行步 驟302;具體的,在判斷異步消息隊(duì)列中是否有未讀取的異步讀消息時(shí), 異步SOCKET設(shè)置一個(gè)合并標(biāo)志計(jì)數(shù)器,初始設(shè)置該合并標(biāo)志計(jì)數(shù)器 時(shí),將所述計(jì)數(shù)器設(shè)為預(yù)設(shè)值,該預(yù)設(shè)值一般設(shè)置為零,也可設(shè)置為 其他值,后面的實(shí)施例中均以零為例進(jìn)行描述。當(dāng)該異步SOCKET接 收到一次數(shù)據(jù)后,判斷該合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)是否為預(yù)設(shè)值,若為 預(yù)設(shè)值則表示異步消息隊(duì)列中沒(méi)有未讀取的異步讀消息,否則,表示 異步消息隊(duì)列中有未讀取的異步讀消息;判斷結(jié)束后將該計(jì)數(shù)器的預(yù) 設(shè)值加一,或者將該計(jì)數(shù)器的預(yù)設(shè)值減一。步驟302:上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后,從異步SOCKET接收緩存中讀取底層數(shù)據(jù)。當(dāng)初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存與異步SOCKET接收緩存長(zhǎng)度 一致時(shí),上層協(xié)議讀取該一個(gè)異步讀消息后,從異步SOCKET接收緩 存中一次讀盡底層數(shù)據(jù);當(dāng)初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存小于異步 SOCKET接收緩存長(zhǎng)度時(shí),上層協(xié)議設(shè)置一個(gè)內(nèi)存空間申請(qǐng)緩存,當(dāng) 上層協(xié)議從異步SOCKET接收緩存中讀取一次底層數(shù)據(jù)后,根據(jù)接收 緩存中剩余底層數(shù)據(jù)的長(zhǎng)度,向內(nèi)存空間申請(qǐng)緩存申請(qǐng)一段與該剩余 底層數(shù)據(jù)長(zhǎng)度相等的擴(kuò)展數(shù)據(jù)緩存用于讀取異步SOCKET接收緩存 中的剩余底層數(shù)據(jù)。當(dāng)上層協(xié)議未能讀盡異步SOCKET接收緩存中的底層數(shù)據(jù)時(shí),通 過(guò)向異步消息隊(duì)列中自激性寫(xiě)入一異步讀消息,以使上層協(xié)議將接收 緩存中的底層數(shù)據(jù)讀盡,這里自激性寫(xiě)入表示接收緩存中有未讀取盡 的底層數(shù)據(jù)時(shí),上層協(xié)議自發(fā)地向異步消息隊(duì)列中寫(xiě)入異步讀消息以 使上層協(xié)議進(jìn)一步讀盡底層數(shù)據(jù)。具體的,當(dāng)上層協(xié)議為數(shù)據(jù)流協(xié)議 時(shí),該上層協(xié)議讀取底層數(shù)據(jù)后,異步SOCKET判斷接收緩存中的底 層數(shù)據(jù)是否被讀盡;若是,則該異步SOCKET向異步消息隊(duì)列中寫(xiě)入 一異步讀消息促使上層協(xié)議繼續(xù)讀取底層數(shù)據(jù),否則,結(jié)束異步讀消 息的上報(bào)流程;當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議時(shí),該上層協(xié)議讀取底層數(shù) 據(jù)后,異步SOCKET記錄準(zhǔn)備向異步消息隊(duì)列中寫(xiě)入的異步讀消息, 當(dāng)該異步SOCKET在預(yù)制時(shí)間內(nèi)沒(méi)有接收到新的底層數(shù)據(jù)時(shí),該異步 SOCKET向異步消息隊(duì)列中寫(xiě)入前述記錄的異步讀消息,以促使上層 協(xié)議繼續(xù)讀取底層數(shù)據(jù),通常該預(yù)制時(shí)間一般不超過(guò)500毫秒。本發(fā)明第一實(shí)施例的流程圖如圖4所示,該實(shí)施例示出了上層協(xié) 議將異步SOCKET接收緩存中的底層數(shù)據(jù) 一 次讀盡的處理流程步驟401:異步SOCKET設(shè)置合并標(biāo)志計(jì)數(shù)器。異步SOCKET初始設(shè)置合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)為零,設(shè)置的合并 標(biāo)志計(jì)數(shù)器主要用于判斷異步消息隊(duì)列中是否有未讀取的異步讀消 臺(tái)步驟402:異步SOCKET將在一段時(shí)間(優(yōu)選一個(gè)報(bào)文時(shí)間)內(nèi)接收到的底層數(shù)據(jù)放入接收緩存。步驟403:判斷合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)是否為零,若是,則執(zhí)行 步驟404;否則,轉(zhuǎn)到步驟405。步驟404:異步S OCKET向異步消息隊(duì)列中寫(xiě)入 一 個(gè)異步讀消息。步驟405:異步SOCKET將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)加一。步驟406:上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后從接收 緩存中讀盡底層數(shù)據(jù)。若初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存與異步SOCKET接收緩存長(zhǎng)度 一致,當(dāng)上層協(xié)議讀取異步SOCKET接收緩存中的底層數(shù)據(jù)時(shí),無(wú)論 該接收緩存中的數(shù)據(jù)滿(mǎn)或不滿(mǎn),上層協(xié)議的數(shù)據(jù)緩存都可以容納所讀 取的底層數(shù)據(jù)。步驟407:將合并標(biāo)志計(jì)數(shù)器清零,結(jié)束流程。本發(fā)明中異步讀消息上報(bào)的示意圖如圖5所示,圖中異步 SOCKET在一段時(shí)間內(nèi)(優(yōu)選一個(gè)報(bào)文時(shí)間)連續(xù)接收到底層數(shù)據(jù)后, 將接收底層數(shù)據(jù)相應(yīng)的異步讀消息合并為一個(gè)異步讀消息后,寫(xiě)入異 步消息隊(duì)列中供上層協(xié)議讀取。異步SOCKET在一個(gè)報(bào)文時(shí)間內(nèi)接收 到五個(gè)底層數(shù)據(jù),這五個(gè)底層數(shù)據(jù)分別觸發(fā)相應(yīng)的寫(xiě)讀消息事件后, 在向異步消息隊(duì)列中寫(xiě)入異步讀消息請(qǐng)求上層協(xié)議讀取底層數(shù)據(jù)時(shí), 將原本需要分別寫(xiě)入的五個(gè)異步讀消息進(jìn)行合并,即在一個(gè)報(bào)文時(shí)間內(nèi)無(wú)論接收到多少個(gè)底層數(shù)據(jù),都只向異步消息隊(duì)列中寫(xiě)入一個(gè)異步 讀消息。上層協(xié)議可以為異步SOCKET設(shè)置接口和函數(shù)完成本發(fā)明實(shí) 施例的異步讀消息合并上報(bào)。當(dāng)上層協(xié)議為異步SOCKET設(shè)置完該接口函數(shù)后,該異步 SOCKET內(nèi)部就會(huì)實(shí)施合并異步讀消息的操作,而上層協(xié)議無(wú)需進(jìn)行 相應(yīng)讀取流程上的 <奮改。本發(fā)明第二實(shí)施例的流程如圖6所示,該實(shí)施例示出了上層協(xié)議 將異步S O CKE T接收緩存中的底層數(shù)據(jù) 一 次讀盡的另 一 種處理流程步驟601:異步SOCKET設(shè)置合并標(biāo)志計(jì)數(shù)器。異步SOCKET初始設(shè)置合并標(biāo)志計(jì)數(shù)器時(shí),將該計(jì)數(shù)器置零,這里設(shè)置的合并標(biāo)志計(jì)數(shù)器主要用于判斷異步消息隊(duì)列中是否有未讀取 的異步讀消息。步驟602:異步SOCKET將在一段時(shí)間(優(yōu)選一個(gè)凈艮文時(shí)間)內(nèi) 接收到的底層數(shù)據(jù)放入接收緩存。步驟603:判斷合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)是否為零,若是,則執(zhí)行 步驟604;否則,轉(zhuǎn)到步驟605。步驟604:異步SOCKET向異步消息隊(duì)列中寫(xiě)入 一 個(gè)異步讀消息。步驟605:異步SOCKET將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)加一。步驟606:設(shè)置上層協(xié)議的內(nèi)存空間申請(qǐng)緩存。若初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存小于異步SOCKET接收緩存長(zhǎng) 度,則在上層協(xié)議中設(shè)置一個(gè)內(nèi)存空間申請(qǐng)緩存,當(dāng)上層協(xié)議讀取一 次異步SOCKET接收緩存中的底層數(shù)據(jù)后,可以根據(jù)接收緩存中剩余 底層數(shù)據(jù)的長(zhǎng)度靈活地申請(qǐng)上層協(xié)議中的擴(kuò)展數(shù)據(jù)緩存,使擴(kuò)展數(shù)據(jù) 緩存正好可以將異步SOCKET接收緩存中的底層數(shù)據(jù)讀盡,這樣不僅 保證了底層數(shù)據(jù)可以被讀盡,而且不會(huì)浪費(fèi)上層協(xié)議中的數(shù)據(jù)緩存空 間。步驟607:上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后從異步 SOCKET接收緩存中讀取底層數(shù)據(jù)。步驟608:上層協(xié)議通過(guò)內(nèi)存空間申請(qǐng)緩存申請(qǐng)與接收緩存中剩 余數(shù)據(jù)長(zhǎng)度相等的擴(kuò)展數(shù)據(jù)緩存。步驟609:上層協(xié)議應(yīng)用擴(kuò)展數(shù)據(jù)緩存讀取接收緩存中的剩余底 層數(shù)據(jù)。步驟610:將合并標(biāo)志計(jì)數(shù)器清零,結(jié)束流程。由于某些上層協(xié)議無(wú)法在一個(gè)報(bào)文處理時(shí)間內(nèi)讀完異步SOCKET 接收緩存中的底層數(shù)據(jù),因此需要SOCKET自激性的向異步消息隊(duì)列 中寫(xiě)入異步讀消息,觸發(fā)上層協(xié)議繼續(xù)讀取接收緩存中的底層數(shù)據(jù), 直至接收緩存中的底層數(shù)據(jù)全部被上層協(xié)議讀盡。針對(duì)不同的上層協(xié)議采用不同的運(yùn)輸層協(xié)議而造成的讀取異步 SOCKET接收緩存中底層數(shù)據(jù)的流程差異,為了保證異步SOCKET在得知上層協(xié)議沒(méi)有讀取完接收緩存中的底層數(shù)據(jù)時(shí),能在最短時(shí)間內(nèi) 自激性的向異步消息隊(duì)列中寫(xiě)入用于通知上層協(xié)議的異步讀消息,則 要針對(duì)不同的上層協(xié)議進(jìn)行相應(yīng)的自激流程處理。本發(fā)明第三實(shí)施例的流程如圖7所示,該實(shí)施例示出了當(dāng)上層協(xié) 議為數(shù)據(jù)流協(xié)議,且該上層協(xié)議沒(méi)有將異步SOCKET接收緩存中的底 層數(shù)據(jù)一次讀盡時(shí)的處理流程,其中,數(shù)據(jù)流協(xié)議主要包括TCP (傳 輸控制協(xié)議)步驟701:異步SOCKET設(shè)置合并標(biāo)志計(jì)數(shù)器。異步SOCKET初始設(shè)置合并標(biāo)志計(jì)數(shù)器時(shí),將該計(jì)數(shù)器置零,這 里設(shè)置的合并標(biāo)志計(jì)數(shù)器主要用于判斷異步消息隊(duì)列中是否有未讀取 的異步讀消息。步驟702:異步SOCKET將在一段時(shí)間(優(yōu)選一個(gè)報(bào)文時(shí)間)內(nèi) 接收到的底層數(shù)據(jù)放入接收緩存中。步驟703:判斷合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)是否為零,若是,則執(zhí)行 步驟704;否則,轉(zhuǎn)到步驟705。步驟704:異步SOCKET向異步消息隊(duì)列中寫(xiě)入 一 個(gè)異步讀消息。步驟705:異步SOCKET將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)加一。步驟706:上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后從異步 SOCKET的接收緩存中讀取底層數(shù)據(jù)。步驟707:判斷異步SOCKET接收緩存中的底層數(shù)據(jù)是否被讀盡, 若是,則執(zhí)行步驟709;否則,執(zhí)行步驟708。步驟708:異步SOCKET向異步消息隊(duì)列中自激寫(xiě)入一個(gè)異步讀 消息,然后返回步驟706。步驟709:將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)清零,結(jié)束流程。本發(fā)明第四實(shí)施例的流程如圖8所示,該實(shí)施例示出了當(dāng)上層協(xié) 議為數(shù)據(jù)報(bào)協(xié)議,且該上層協(xié)議沒(méi)有將異步SOCKET接收緩存中的底 層數(shù)據(jù)一次讀盡的處理流程,其中,數(shù)據(jù)報(bào)協(xié)議主要包括UDP (用戶(hù) 數(shù)據(jù)報(bào)協(xié)議),RAWIP (原IP協(xié)議),RAWLINK (原鏈路協(xié)議)步驟801:異步SOCKET設(shè)置合并標(biāo)志計(jì)數(shù)器。異步SOCKET初始設(shè)置合并標(biāo)志計(jì)數(shù)器時(shí),將該計(jì)數(shù)器置零,這 里設(shè)置的合并標(biāo)志計(jì)數(shù)器主要用于判斷異步消息隊(duì)列中是否有未讀取 的異步讀消息。步驟802:異步SOCKET將在一段時(shí)間(優(yōu)選一個(gè)報(bào)文時(shí)間)內(nèi)接收到的底層數(shù)據(jù)放入接收緩存中。步驟803:判斷合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)是否為零,若是,則執(zhí)行步驟804;否則,轉(zhuǎn)到步驟805。步驟804:異步SOCKET向異步消息隊(duì)列中寫(xiě)入一個(gè)異步讀消息。步驟805:異步SOCKET將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)加一。步驟806:上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后從異步SOCKET的接收緩存中讀取底層數(shù)據(jù)。步驟807:異步SOCKET記錄準(zhǔn)備向異步消息隊(duì)列寫(xiě)入的異步讀消息。當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議時(shí),異步SOCKET不實(shí)時(shí)自激寫(xiě)入異步 讀消息,而是先記錄準(zhǔn)備向異步消息隊(duì)列中寫(xiě)入的異步讀消息,但該 過(guò)程中允許新的報(bào)文數(shù)據(jù)相應(yīng)執(zhí)行向異步消息隊(duì)列中寫(xiě)異步讀消息的 操作。步驟808:判斷異步SOCKET在預(yù)制時(shí)間(例如500毫秒)內(nèi)是 否接收到新的底層數(shù)據(jù),若是,則執(zhí)行步驟810;否則,執(zhí)行步驟809。 步驟809:異步SOCKET向異步消息隊(duì)列中自激寫(xiě)入一個(gè)異步讀 消息,然后返回步驟806。步驟810:將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)清零,結(jié)束流程。 本發(fā)明處理異步消息隊(duì)列系統(tǒng)的框圖如圖9所示 該系統(tǒng)包括底層數(shù)據(jù)模塊S1,用于向異步SOCKET模塊發(fā)送 底層數(shù)據(jù);異步SOCKET模塊S2,用于接收底層數(shù)據(jù)后向異步消息 隊(duì)列中寫(xiě)入異步讀消息;上層協(xié)議模塊S3,用于讀取異步讀消息后從 異步SOCKET模塊中讀取底層數(shù)據(jù)。異步SOCKET模塊S2包括接收緩存模塊S21,用于接收并存放 一段時(shí)間(優(yōu)選一個(gè)報(bào)文時(shí)間)內(nèi)底層數(shù)據(jù)模塊發(fā)送的數(shù)據(jù);判斷異步讀消息模塊S22,用于判斷異步消息隊(duì)列中是否有未讀取的異步讀 消息;寫(xiě)異步讀消息模塊S23,用于當(dāng)異步消息隊(duì)列中沒(méi)有未讀取的 異步讀消息時(shí),向異步消息隊(duì)列中寫(xiě)入一異步讀消息,還可以用于當(dāng) 異步SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消 息隊(duì)列中自激寫(xiě)入一異步讀消息;自激異步讀消息模塊S24,用于當(dāng) 異步SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消 息隊(duì)列中寫(xiě)入一異步讀消息。其中,判斷異步讀消息模塊S22包括設(shè)置計(jì)數(shù)器模塊S221,用于 在異步SOCKET中設(shè)置合并標(biāo)志計(jì)數(shù)器;判斷計(jì)數(shù)器模塊S222,通 過(guò)合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)判斷異步消息隊(duì)列中是否有未讀取的異步讀 消息;操作計(jì)數(shù)器模塊S223,用于將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)值加一或 減一;重置計(jì)數(shù)器模塊S224,用于當(dāng)讀取數(shù)據(jù)模塊從接收緩存中讀取 數(shù)據(jù)后,將合并標(biāo)志計(jì)數(shù)器重置為預(yù)設(shè)值。其中,自激異步讀消息模塊S24包括判斷上層協(xié)議模塊S241,用 于判斷上層協(xié)議為數(shù)據(jù)流協(xié)議,或?yàn)閿?shù)據(jù)報(bào)協(xié)議;判斷數(shù)據(jù)讀取模塊 S242,用于當(dāng)上層協(xié)議為數(shù)據(jù)流協(xié)議時(shí),上層協(xié)議讀取接收緩存模塊 中的底層數(shù)據(jù)后,判斷接收緩存模塊中的底層數(shù)據(jù)是否被讀盡;重復(fù) 寫(xiě)異步讀消息模塊S243,與判斷數(shù)據(jù)讀取模塊相連,用于當(dāng)接收緩存 模塊中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消息隊(duì)列中寫(xiě)入一異 步讀消息;緩存異步讀消息模塊S244,用于當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議 時(shí),當(dāng)數(shù)據(jù)讀取模塊讀取接收緩存模塊中的底層數(shù)據(jù)后,記錄準(zhǔn)備向 異步消息隊(duì)列中寫(xiě)入的異步讀消息;判斷接收數(shù)據(jù)模塊S245,與緩存 異步讀消息模塊相連,用于在預(yù)制時(shí)間內(nèi)(一般為500毫秒)接收緩 存模塊沒(méi)有接收到新的底層數(shù)據(jù)時(shí),向異步消息隊(duì)列中寫(xiě)入記錄的異 步讀消息。上層協(xié)議模塊S3包括讀取異步讀消息模塊S31,用于讀取異步消 息隊(duì)列中寫(xiě)入的一個(gè)異步讀消息,還可以用于讀取自激寫(xiě)入的一異步 讀消息;讀取數(shù)據(jù)模塊S32,用于從接收緩存模塊中讀取底層數(shù)據(jù), 還可以用于從異步SOCKET接收緩存中讀取剩余的底層數(shù)據(jù);重復(fù)讀取異步讀消息模塊S33,用于讀取自激異步讀消息模塊向異步消息隊(duì) 列中寫(xiě)入的一異步讀消息;重復(fù)讀取數(shù)據(jù)模塊S34,用于從異步 SOCKET接收緩存中讀取剩余的底層數(shù)據(jù)。其中,讀取數(shù)據(jù)模塊S32包括判斷數(shù)據(jù)緩存模塊S321,用于判斷 初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存與異步SOCKET接收緩存長(zhǎng)度是否一 致;讀盡數(shù)據(jù)模塊S322,用于當(dāng)判斷數(shù)據(jù)緩存模塊判斷初始設(shè)置的上 層協(xié)議數(shù)據(jù)緩存與異步SOCKET接收緩存長(zhǎng)度一致時(shí),從異步 SOCKET接收緩存中一次讀盡底層數(shù)據(jù);設(shè)置申請(qǐng)緩存模塊S323,用 于當(dāng)判斷數(shù)據(jù)緩存模塊判斷初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存小于異步 SOCKET接收緩存長(zhǎng)度時(shí),在上層協(xié)議中設(shè)置 一個(gè)內(nèi)存空間申請(qǐng)緩存; 一次讀取數(shù)據(jù)模塊S324,用于根據(jù)上層協(xié)議數(shù)據(jù)緩存的長(zhǎng)度從異步 SOCKET接收緩存中讀取一次底層數(shù)據(jù);申請(qǐng)擴(kuò)展緩存空間模塊 S325,用于向設(shè)置申請(qǐng)緩存模塊申請(qǐng)一段與異步SOCKET接收緩存中 剩余數(shù)據(jù)長(zhǎng)度相等的擴(kuò)展數(shù)據(jù)緩存;二次讀取數(shù)據(jù)模塊S326,用于通 過(guò)擴(kuò)展數(shù)據(jù)緩存讀盡異步SOCKET接收緩存中的剩余數(shù)據(jù)。利用本發(fā)明系統(tǒng)處理異步消息隊(duì)列的詳細(xì)過(guò)程與前面對(duì)本發(fā)明方 法的描述類(lèi)似,在此不再贅述。本發(fā)明異步SOCKET的一個(gè)實(shí)施例框圖如圖IO所示該異步SOCKET包括接收緩存模塊S41,用于接收并存放一段 時(shí)間(優(yōu)選一個(gè)報(bào)文時(shí)間)底層數(shù)據(jù)模塊發(fā)送的數(shù)據(jù);判斷異步讀消 息模塊S42,用于判斷異步消息隊(duì)列中是否有未讀取的異步讀消息; 寫(xiě)異步讀消息模塊S43,用于當(dāng)異步消息隊(duì)列中沒(méi)有未讀取的異步讀 消息時(shí),向異步消息隊(duì)列中寫(xiě)入一異步讀消息,還可以用于當(dāng)異步 SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向所述異步消 息隊(duì)列中自激寫(xiě)入一異步讀消息;自激異步讀消息模塊S44,用于當(dāng) 異步SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消 息隊(duì)列中寫(xiě)入一異步讀消息。其中,判斷異步讀消息模塊S42包括設(shè)置計(jì)數(shù)器模塊421,用于 在異步SOCKET中設(shè)置合并標(biāo)志計(jì)數(shù)器;判斷計(jì)數(shù)器模塊S422,通過(guò)合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)判斷異步消息隊(duì)列中是否有未讀取的異步讀消息;操作計(jì)數(shù)器模塊S423,用于將合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)值加一或 減一;重置計(jì)數(shù)器模塊S424,用于當(dāng)上層協(xié)議從接收緩存中讀取數(shù)據(jù) 后,將合并標(biāo)志計(jì)數(shù)器重置為預(yù)設(shè)值。其中,自激異步讀消息模塊S44包括判斷上層協(xié)議模塊S441,用 于判斷上層協(xié)議為數(shù)據(jù)流協(xié)議,或?yàn)閿?shù)據(jù)報(bào)協(xié)議;判斷數(shù)據(jù)讀取模塊 S442,用于當(dāng)上層協(xié)議為數(shù)據(jù)流協(xié)議時(shí),上層協(xié)議讀取接收緩存模塊 中的底層數(shù)據(jù)后,判斷接收緩存模塊中的底層數(shù)據(jù)是否被讀盡;重復(fù) 寫(xiě)異步讀消息模塊S443,與判斷數(shù)據(jù)讀取模塊相連,用于當(dāng)接收緩存 模塊中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消息隊(duì)列中寫(xiě)入一異 步讀消息;緩存異步讀消息模塊S444,用于當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議 時(shí),當(dāng)數(shù)據(jù)讀取模塊讀取接收緩存模塊中的底層數(shù)據(jù)后,記錄準(zhǔn)備向 異步消息隊(duì)列中寫(xiě)入的異步讀消息;判斷接收數(shù)據(jù)模塊S445,與緩存 異步讀消息模塊相連,用于在預(yù)制時(shí)間內(nèi)接收緩存模塊沒(méi)有接收到新 的底層數(shù)據(jù)時(shí),向異步消息隊(duì)列中寫(xiě)入記錄的異步讀消息。利用本發(fā)明異步SOCKET對(duì)異步消息隊(duì)列進(jìn)行處理,其詳細(xì)過(guò)程 與前面對(duì)本發(fā)明方法的描述類(lèi)似,在此不再贅述。由以上對(duì)本發(fā)明實(shí)施例的描述可知,由于在一段時(shí)間內(nèi)異步 SOCKET僅向異步消息隊(duì)列中寫(xiě)入一異步讀消息,上層協(xié)議只會(huì)到接 收緩存中讀取一次底層數(shù)據(jù),因此網(wǎng)絡(luò)中不會(huì)出現(xiàn)上層路由協(xié)議空讀 異步SOCKET接收緩存的情況,極大提高了上層協(xié)議讀取底層數(shù)據(jù)的 性能。當(dāng)異步SOCKET接收緩存中的底層數(shù)據(jù)沒(méi)有一次被讀盡時(shí),通過(guò) 自激方式向異步消息隊(duì)列中寫(xiě)入 一 異步讀消息,觸發(fā)上層協(xié)議將剩余 的底層數(shù)據(jù)讀盡,因此不會(huì)造成異步SOCKET中的接收緩存堆積。雖然通過(guò)實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā) 明有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包 括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1. 一種處理異步消息隊(duì)列的方法,其特征在于,包括步驟A、異步SOCKET將接收到的底層數(shù)據(jù)放入接收緩存,判斷異步消息隊(duì)列中是否有未讀取的異步讀消息,如果異步消息隊(duì)列中沒(méi)有未讀取的異步讀消息,則向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息,執(zhí)行步驟B,如果異步消息隊(duì)列中有未讀取的異步讀消息,則執(zhí)行步驟B;B、上層協(xié)議讀取異步消息隊(duì)列中的異步讀消息后,從異步SOCKET接收緩存中讀取底層數(shù)據(jù)。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷異步消 息隊(duì)列中是否有未讀取的異步讀消息的方法為判斷一合并標(biāo)志計(jì)數(shù) 器的計(jì)數(shù)是否為 一預(yù)設(shè)值,若為所述預(yù)設(shè)值則異步消息隊(duì)列中沒(méi)有未 讀取的異步讀消息;否則,異步消息隊(duì)列中有未讀取的異步讀消息;判斷異步消息隊(duì)列中是否有未讀取的異步讀消息之后將所述合 并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)值加 一 或減一 。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述步驟B中上 層協(xié)議讀取異步SOCKET接收緩存中的底層數(shù)據(jù)后所述合并標(biāo)志計(jì) 數(shù)器將其計(jì)數(shù)重置為所述預(yù)設(shè)值。
4、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B包括 上層協(xié)議設(shè)置 一 個(gè)內(nèi)存空間申請(qǐng)緩存;上層協(xié)議讀取所述異步讀消息后,根據(jù)上層協(xié)議數(shù)據(jù)緩存的長(zhǎng)度 從異步SOCKET接收緩存中讀取一次底層數(shù)據(jù);上層協(xié)議根據(jù)所述異步SOCKET接收緩存中剩余數(shù)據(jù)長(zhǎng)度,向所 述內(nèi)存空間申請(qǐng)緩存申請(qǐng)一段與所述剩余數(shù)據(jù)長(zhǎng)度相等的擴(kuò)展數(shù)據(jù)緩 存;上層協(xié)議應(yīng)用所述擴(kuò)展數(shù)據(jù)緩存讀盡所述異步SOCKET接收緩 存中的剩余底層數(shù)據(jù)。
5、 根據(jù)權(quán)利要求1所述的方法,其特征在于,若所述步驟B中 上層協(xié)議不能一次讀盡異步SOCKET接收緩存中的底層數(shù)據(jù),所述方 法還包括C、 異步SOCKET向所述異步消息隊(duì)列中自激性寫(xiě)入一異步讀消息D、 返回步驟B,直至上層協(xié)議將所述異步SOCKET接收緩存中 的底層數(shù)據(jù)讀盡。
6、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述上層協(xié)議為 數(shù)據(jù)流協(xié)議,所述步驟C包括上層協(xié)議讀取異步SOCKET接收緩存中的底層數(shù)據(jù)后,該異步 SOCKET判斷接收緩存中的底層數(shù)據(jù)是否被讀盡;若是,則所述異步SOCKET向異步消息隊(duì)列中寫(xiě)入一異步讀消息;否 則,結(jié)束異步讀消息的上報(bào)。
7、 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述上層協(xié)議為 數(shù)據(jù)報(bào)協(xié)議,所述步驟C包括上層協(xié)議讀取異步SOCKET接收緩存中的底層數(shù)據(jù)后,該異步 SOCKET記錄準(zhǔn)備向異步消息隊(duì)列中寫(xiě)入的異步讀消息;當(dāng)所述異步SOCKET在預(yù)制時(shí)間內(nèi)沒(méi)有接收到新的底層數(shù)據(jù)時(shí), 該異步SOCKET向異步消息隊(duì)列中寫(xiě)入所述記錄的異步讀消息。
8、 一種處理異步消息隊(duì)列的系統(tǒng),所述系統(tǒng)包括底層數(shù)據(jù)模 塊、上層協(xié)議模塊以及連接底層數(shù)據(jù)模塊和上層協(xié)議模塊的異步 SOCKET模塊,其特征在于,所述異步SOCKET模塊包括接收緩存模塊,接收并存放所述底層數(shù)據(jù)模塊發(fā)送的數(shù)據(jù);判斷異步讀消息模塊,用于判斷異步消息隊(duì)列中是否有未讀取的異步讀消息;寫(xiě)異步讀消息模塊,用于當(dāng)異步消息隊(duì)列中沒(méi)有未讀取的異步讀消息時(shí),向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息; 所述上層協(xié)議模塊包括讀異步讀消息模塊,用于讀取所述異步消息隊(duì)列中寫(xiě)入的異步讀消息;讀取數(shù)椐模塊,用于從所述接收緩存模塊中讀取底層數(shù)據(jù)。
9、 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述判斷異步讀 消息模塊包括設(shè)置計(jì)數(shù)器模塊,用于在異步SOCKET中設(shè)置合并標(biāo)志計(jì)數(shù)器; 判斷計(jì)數(shù)器模塊,通過(guò)所述合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)判斷異步消,t, 隊(duì)列中是否有未讀取的異步讀消息;操作計(jì)數(shù)器模塊,用于將所述合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)值加一或減重置計(jì)數(shù)器模塊,用于當(dāng)讀取數(shù)據(jù)模塊從接收緩存中讀取數(shù)據(jù) 后,將所述合并標(biāo)志計(jì)數(shù)器重置為預(yù)設(shè)值。
10、 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述讀取數(shù)據(jù)模 塊包括判斷數(shù)據(jù)緩存模塊,用于判斷初始設(shè)置的上層協(xié)議數(shù)據(jù)緩存與異 步SOCKET接收緩存長(zhǎng)度是否一致;讀盡數(shù)據(jù)模塊,用于當(dāng)判斷數(shù)據(jù)緩存模塊判斷初始設(shè)置的上層協(xié) 議數(shù)據(jù)緩存與異步SOCKET接收緩存長(zhǎng)度一致時(shí),從異步SOCKET 接收緩存中 一 次讀盡底層數(shù)據(jù);設(shè)置申請(qǐng)緩存模塊,用于當(dāng)判斷數(shù)據(jù)緩存模塊判斷初始設(shè)置的上 層協(xié)議數(shù)據(jù)緩存小于異步SOCKET接收緩存長(zhǎng)度時(shí),在上層協(xié)議中設(shè) 置一個(gè)內(nèi)存空間申請(qǐng)緩存;一次讀取數(shù)據(jù)模塊,用于根據(jù)上層協(xié)議數(shù)據(jù)緩存的長(zhǎng)度從異步 SOCKET接收緩存中讀取一次底層數(shù)據(jù);申請(qǐng)擴(kuò)展緩存空間模塊,用于向所述設(shè)置申請(qǐng)緩存模塊申請(qǐng)一段 與異步SOCKET接收緩存中剩余數(shù)據(jù)長(zhǎng)度相等的擴(kuò)展數(shù)據(jù)緩存;二次讀取數(shù)據(jù)模塊,用于通過(guò)所述擴(kuò)展數(shù)據(jù)緩存讀盡所述異步 SOCKET接收緩存中的剩余數(shù)據(jù)。
11、 根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述寫(xiě)異步讀消息模塊進(jìn)一步用于當(dāng)異步SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向所述異步消息隊(duì)列中自激寫(xiě)入一 異步讀消息;所述讀異步讀消息模塊進(jìn)一步用于讀取所述自激寫(xiě)入的異步讀消息;所述讀取數(shù)據(jù)模塊進(jìn)一步用于從異步SOCKET接收緩存中讀取剩余的底層數(shù)據(jù)。
12、根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于, 所述異步SOCKET模塊還包括自激異步讀消息模塊,用于當(dāng)異步SOCKET接收緩存中的底層數(shù) 據(jù)未被上層協(xié)議讀盡時(shí),向所述異步消息隊(duì)列中自激寫(xiě)入一異步讀消息;所述自激異步讀消息模塊包括判斷上層協(xié)議模塊,用于判斷上層協(xié)議為數(shù)據(jù)流協(xié)議,或?yàn)閿?shù)據(jù) 報(bào)協(xié)議;判斷數(shù)據(jù)讀取模塊,當(dāng)上層協(xié)議為數(shù)據(jù)流協(xié)議時(shí),用于上層協(xié)議 讀取接收緩存模塊中的底層數(shù)據(jù)后,判斷接收緩存模塊中的底層數(shù)據(jù) 是否被讀盡;重復(fù)寫(xiě)異步讀消息模塊,與判斷數(shù)據(jù)讀取模塊相連,用于當(dāng)接收 緩存模塊中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消息隊(duì)列中寫(xiě)入 一異步讀消息;緩存異步讀消息模塊,當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議時(shí),用于當(dāng)數(shù)據(jù) 讀取模塊讀取接收緩存模塊中的底層數(shù)據(jù)后,記錄準(zhǔn)備向異步消息隊(duì) 列中寫(xiě)入的異步讀消息;判斷接收數(shù)據(jù)模塊,與緩存異步讀消息模塊相連,用于在預(yù)制時(shí) 間內(nèi)所述接收緩存模塊沒(méi)有接收到新的底層數(shù)據(jù)時(shí),向異步消息隊(duì)列 中寫(xiě)入所述記錄的異步讀消息。所述上層協(xié)議模塊還包括重復(fù)讀取異步讀消息模塊,用于讀取所述自激異步讀消息模塊向 異步消息隊(duì)列中寫(xiě)入的異步讀消息;重復(fù)讀取數(shù)據(jù)模塊,用于從異步SOCKET接收緩存中讀取剩余的 底層數(shù)據(jù)。
13、 一種異步SOCKET,其特征在于,包括 接收緩存模塊,用于存放接收到的底層數(shù)據(jù);判斷異步讀消息模塊,用于判斷異步消息隊(duì)列中是否有未讀取的 異步讀消息;寫(xiě)異步讀消息模塊,用于當(dāng)異步消息隊(duì)列中沒(méi)有未讀取的異步讀 消息時(shí),向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息。
14、 根據(jù)權(quán)利要求13所述的異步SOCKET,其特征在于,所述 判斷異步讀消息模塊包括設(shè)置計(jì)數(shù)器模塊,用于在異步SOCKET中設(shè)置合并標(biāo)志計(jì)數(shù)器; 判斷計(jì)數(shù)器模塊,通過(guò)所述合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)判斷異步消,t、 隊(duì)列中是否有未讀取的異步讀消息;操作計(jì)數(shù)器模塊,用于將所述合并標(biāo)志計(jì)數(shù)器的計(jì)數(shù)值加一或減重置計(jì)數(shù)器模塊,用于當(dāng)上層協(xié)議從接收緩存中讀取數(shù)據(jù)后,將 所述合并標(biāo)志計(jì)數(shù)器重置為預(yù)設(shè)值。
15、 根據(jù)權(quán)利要求13所述的異步SOCKET,其特征在于, 所述寫(xiě)異步讀消息模塊進(jìn)一步用于當(dāng)異步SOCKET接收緩存中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向所述異步消息隊(duì)列中自激寫(xiě)入一 異步讀消息。
16、 根據(jù)權(quán)利要求13所述的異步SOCKET,其特征在于,所述 異步SOCKET還包括自激異步讀消息模塊,用于當(dāng)異步SOCKET接收緩存中的底層數(shù) 據(jù)未被上層協(xié)議讀盡時(shí),向所述異步消息隊(duì)列中自激寫(xiě)入一異步讀消息;所述自激異步讀消息模塊包括判斷上層協(xié)議模塊,用于判斷上層協(xié)議為數(shù)據(jù)流協(xié)議,或?yàn)閿?shù)據(jù) 報(bào)協(xié)議;判斷數(shù)椐讀取模塊,當(dāng)上層協(xié)議為數(shù)據(jù)流協(xié)議時(shí),用于上層協(xié)議 讀取接收緩存模塊中的底層數(shù)據(jù)后,判斷接收緩存模塊中的底層數(shù)據(jù)是否被讀盡;重復(fù)寫(xiě)異步讀消息模塊,與判斷數(shù)據(jù)讀取模塊相連,用于當(dāng)接收 緩存模塊中的底層數(shù)據(jù)未被上層協(xié)議讀盡時(shí),向異步消息隊(duì)列中寫(xiě)入 一異步讀消息;緩存異步讀消息模塊,當(dāng)上層協(xié)議為數(shù)據(jù)報(bào)協(xié)議時(shí),用于當(dāng)數(shù)據(jù) 讀取模塊讀取接收緩存模塊中的底層數(shù)據(jù)后,記錄準(zhǔn)備向異步消息隊(duì) 列中寫(xiě)入的異步讀消息;判斷接收數(shù)據(jù)模塊,與緩存異步讀消息模塊相連,用于在預(yù)制時(shí) 間內(nèi)所述接收緩存模塊沒(méi)有接收到新的底層數(shù)據(jù)時(shí),向異步消息隊(duì)列 中寫(xiě)入所述記錄的異步讀消息。
全文摘要
本發(fā)明公開(kāi)了一種處理異步消息隊(duì)列的方法,包括步驟A.異步SOCKET將接收到的底層數(shù)據(jù)放入接收緩存,判斷異步消息隊(duì)列中是否有未讀取的異步讀消息,如果異步消息隊(duì)列中沒(méi)有未讀取的異步讀消息則向所述異步消息隊(duì)列中寫(xiě)入一異步讀消息,執(zhí)行步驟B,如果異步消息隊(duì)列中有未讀取的異步讀消息,則執(zhí)行步驟B;B.上層協(xié)議讀取所述異步讀消息后,從異步SOCKET接收緩存中讀取底層數(shù)據(jù)。本發(fā)明還公開(kāi)了一種處理異步消息隊(duì)列的系統(tǒng)和一種異步SOCKET。應(yīng)用本發(fā)明減少了異步讀消息對(duì)異步消息隊(duì)列空間的占用,提高了上層協(xié)議處理相應(yīng)報(bào)文數(shù)據(jù)的速度,避免了初始導(dǎo)入大量路由或者路由振蕩時(shí),因異步消息隊(duì)列滿(mǎn)載而丟失數(shù)據(jù)的情況發(fā)生。
文檔編號(hào)H04L29/06GK101247319SQ20071007939
公開(kāi)日2008年8月20日 申請(qǐng)日期2007年2月16日 優(yōu)先權(quán)日2007年2月16日
發(fā)明者輝 倪, 莊順萬(wàn), 颯 肖, 霞 陳 申請(qǐng)人:華為技術(shù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1