[發(fā)明專利]處理異步消息隊列的方法、系統(tǒng)和異步SOCKET無效
| 申請?zhí)枺?/td> | 200710079396.3 | 申請日: | 2007-02-16 |
| 公開(公告)號: | CN101247319A | 公開(公告)日: | 2008-08-20 |
| 發(fā)明(設(shè)計)人: | 陳霞;倪輝;肖颯;莊順萬 | 申請(專利權(quán))人: | 華為技術(shù)有限公司 |
| 主分類號: | H04L12/56 | 分類號: | H04L12/56;H04L29/06 |
| 代理公司: | 北京集佳知識產(chǎn)權(quán)代理有限公司 | 代理人: | 逯長明 |
| 地址: | 518129廣東省*** | 國省代碼: | 廣東;44 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 處理 異步 消息 隊列 方法 系統(tǒng) socket | ||
技術(shù)領(lǐng)域
本發(fā)明涉及通信技術(shù)領(lǐng)域,具體的特別涉及一種處理異步消息隊列的方法、系統(tǒng)和異步SOCKET。
背景技術(shù)
SOCKET(套接字)是一個通信鏈的句柄,用于描述IP地址和端口,應(yīng)用程序通常通過SOCKET向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。SOCKET在網(wǎng)絡(luò)通信中的重要性越來越大,現(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ù)交互。
現(xiàn)有路由協(xié)議通常采用異步SOCKET實現(xiàn)上層協(xié)議和底層之間的數(shù)據(jù)承載。異步SOCKET采用消息機制,這種消息機制在時間上將數(shù)據(jù)與事件分離。現(xiàn)有異步消息隊列的處理流程如圖1所示:
步驟101:異步SOCKET接收底層傳輸?shù)臄?shù)據(jù)。
底層傳送到異步SOCKET的數(shù)據(jù)在被上層協(xié)議讀取之前,存放于該異步SOCKET的接收緩存中。
步驟102:異步SOCKET向異步消息隊列中寫入異步讀消息。
異步SOCKET將接收到的底層數(shù)據(jù)存放于接收緩存中,同時以寫讀事件位的方式告知上層協(xié)議“有數(shù)據(jù)到達(dá)”,同時將異步讀消息寫入異步消息隊列中。在異步SOCKET的實現(xiàn)中,SOCKET使用的異步消息隊列由路由管理器創(chuàng)建并維護(hù),該異步消息隊列的入口為SOCKET的異步消息,出口為上層協(xié)議的讀取。
步驟103:上層協(xié)議從異步SOCKET接收緩存中讀取數(shù)據(jù)。
上層協(xié)議接收并讀取異步讀消息后,可以根據(jù)該消息內(nèi)的字段,識別相應(yīng)的異步SOCKET和與該異步SOCKET掛接的上層協(xié)議,若該異步SOCKET與當(dāng)前上層協(xié)議匹配,則該上層協(xié)議調(diào)用異步SOCKET的讀取接口讀取該異步SOCKET接收緩存中的數(shù)據(jù)。
現(xiàn)有異步讀消息上報示意圖如圖2所示:其中,異步SOCKET在接收到底層數(shù)據(jù)后,在異步SOCKET內(nèi)部以異步讀事件加異步讀消息的方式通知上層協(xié)議,上層協(xié)議確認(rèn)異步讀事件后,再讀取異步讀消息,然后根據(jù)該消息的類型對讀取的底層數(shù)據(jù)做相應(yīng)的處理。圖2中異步SOCKET的異步消息隊列操作與異步SOCKET接收到的數(shù)據(jù)一一對應(yīng),即每接收到一次底層數(shù)據(jù)就相應(yīng)的向異步消息隊列中寫入一次異步讀消息。
現(xiàn)有的異步消息隊列處理方法,以及異步事件消息的上報機制雖然清晰地表達(dá)了“接收數(shù)據(jù)-通知協(xié)議”的過程,但在實際應(yīng)用中,這種機制會引發(fā)大量的空閑異步讀消息占用異步消息的隊列資源,特別當(dāng)異步SOCKET接收數(shù)據(jù)頻繁時尤其突出。
首先,由于異步SOCKET頻繁接收來自底層的報文數(shù)據(jù),同時向異步消息隊列中寫入大量的異步讀消息,當(dāng)網(wǎng)絡(luò)中路由協(xié)議在初始導(dǎo)入大量路由,或者當(dāng)網(wǎng)絡(luò)中產(chǎn)生路由振蕩時,若上層協(xié)議處理相應(yīng)報文數(shù)據(jù)的速度稍微減慢,則極有可能造成異步消息隊列中的資源爆滿,從而導(dǎo)致異步SOCKET丟失報文數(shù)據(jù)。
其次,上層路由協(xié)議在接收到異步SOCKET寫入的一個異步讀消息時,一次讀完異步SOCKET接收緩存。當(dāng)異步SOCKET連續(xù)接收完幾個底層報文數(shù)據(jù),并寫入相應(yīng)多的異步讀消息,而上層路由協(xié)議在得到第一個異步讀消息時,就一次性讀完了異步SOCKET接收緩存中的所有報文數(shù)據(jù),則剩下的異步讀消息就會觸發(fā)大量的上層路由協(xié)議空讀。
再次,當(dāng)多個上層路由協(xié)議與異步SOCKET建立連接時,每個路由協(xié)議都會產(chǎn)生大量的異步讀消息。在一個時間范圍內(nèi),異步消息隊列被其中一部分路由協(xié)議的消息占據(jù),剩余的路由協(xié)議由于異步消息隊列已滿而無法成功寫消息。在這種情況下若丟棄報文就會造成路由數(shù)據(jù)丟失;若盡最大可能保留報文數(shù)據(jù),則由于長時間無法寫異步讀消息,當(dāng)異步SOCKET接收緩存滿后,就再也不會通知異步讀消息,從而造成異步SOCKET中的緩存堆積。
發(fā)明內(nèi)容
本發(fā)明的實施例提供一種處理異步消息隊列的方法,以解決現(xiàn)有技術(shù)中由于重復(fù)向異步消息隊列中寫入異步讀消息,容易造成異步消息隊列中資源爆滿,異步讀消息觸發(fā)大量的上層路由協(xié)議空讀,SOCKET丟失報文數(shù)據(jù),從而導(dǎo)致網(wǎng)絡(luò)中路由信息丟失的問題。
本發(fā)明的另一實施例提供一種處理異步消息隊列的系統(tǒng),以解決現(xiàn)有技術(shù)中重復(fù)向異步消息隊列中寫入異步讀消息,容易造成隊列中資源爆滿,報文丟失的問題。
本發(fā)明的又一實施例提供一種異步SOCKET,以解決現(xiàn)有技術(shù)中異步SOCKET重復(fù)向異步消息隊列中寫入異步讀消息的問題。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于華為技術(shù)有限公司,未經(jīng)華為技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200710079396.3/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





