两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種xmpp協(xié)議傳輸數(shù)據(jù)壓縮與解壓縮方法

文檔序號(hào):7704216閱讀:263來(lái)源:國(guó)知局

專利名稱::一種xmpp協(xié)議傳輸數(shù)據(jù)壓縮與解壓縮方法
技術(shù)領(lǐng)域
:本發(fā)明涉及網(wǎng)絡(luò)通訊
技術(shù)領(lǐng)域
,具體涉及一種XMPP協(xié)議傳輸數(shù)據(jù)壓縮與解壓縮方法。
背景技術(shù)
:XMPP協(xié)議(extensibleMessagingandPresenceProtocol,可擴(kuò)展消息處理現(xiàn)場(chǎng)協(xié)議)是一種基于XML語(yǔ)言(extensibleMarkupLanguage,可擴(kuò)展標(biāo)記語(yǔ)言)的近端串流式即時(shí)通信協(xié)議。它將現(xiàn)場(chǎng)和上下文敏感信息標(biāo)記嵌入到XML結(jié)構(gòu)化數(shù)據(jù)中,使得人與人之間、應(yīng)用系統(tǒng)之間以及人與應(yīng)用系統(tǒng)之間能即時(shí)相互通信。XMPP協(xié)議已被批準(zhǔn)為互聯(lián)網(wǎng)即時(shí)通信協(xié)議標(biāo)準(zhǔn)。XMPP協(xié)議最大的特點(diǎn)就是具有非常好的擴(kuò)展性,通過節(jié)點(diǎn)的概念能夠很容易的擴(kuò)展協(xié)議,因?yàn)閄MPP協(xié)議采用XML語(yǔ)言描述通訊信息,因此具備了XML良好擴(kuò)展性的特點(diǎn),然而也不可避免地具有相應(yīng)的缺陷XML語(yǔ)言本身是字符串形式的,因此XMPP協(xié)議通訊信息的數(shù)據(jù)量要比二進(jìn)制通訊協(xié)議數(shù)據(jù)量大得多;另外在使用XMPP協(xié)議傳輸二進(jìn)制數(shù)據(jù)時(shí),需要將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為BASE64編碼,而BASE64編碼數(shù)據(jù)要比原來(lái)的二進(jìn)制數(shù)據(jù)大得多。為了既能保持XMPP協(xié)議良好的擴(kuò)展性,同時(shí)又能做到使即時(shí)通訊信息更加輕便,使二進(jìn)制數(shù)據(jù)傳輸更加便捷,我們需要對(duì)使用XMPP協(xié)議的方法進(jìn)行改進(jìn)。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種XMPP協(xié)議傳輸數(shù)據(jù)壓縮與解壓縮方法,克服現(xiàn)有技術(shù)XMPP協(xié)議即時(shí)通訊信息數(shù)據(jù)量過大的缺陷以及在傳輸二進(jìn)制數(shù)據(jù)時(shí)必須將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成BASE64編碼的缺陷。本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案為一種XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,包括步驟Al、將XMPP協(xié)i義使用的字符串分別進(jìn)行編碼,所述編碼組成編碼表;A2、在傳輸XMPP協(xié)議即時(shí)通訊信息時(shí),查詢所述編碼表,將所述即時(shí)通訊信息中的XMPP協(xié)議字符串由相應(yīng)的所述編碼替換,形成壓縮即時(shí)通訊信息;A3、傳輸所述壓縮即時(shí)通訊信息。所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其中所述編碼的字寬設(shè)為一個(gè)字節(jié)。所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其中所述步驟A2包括步驟Bl、設(shè)置傳輸緩存Buffer;B2、將所述即時(shí)通訊信息中的協(xié)議頭數(shù)據(jù)原樣寫入所述傳輸緩存Buffer;B3、依次對(duì)所述即時(shí)通訊信息中的每個(gè)節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;B4、將所述即時(shí)通訊信息中的擴(kuò)展數(shù)據(jù)長(zhǎng)度字段的數(shù)值和擴(kuò)展數(shù)據(jù)寫入所述傳輸緩存Buffer。所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其中所述步驟B3包括步驟Cl、在所述編碼表中查詢所述節(jié)點(diǎn)的節(jié)點(diǎn)名編碼;C2、如果存在節(jié)點(diǎn)名編碼,設(shè)置所述節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值為0,否則設(shè)置所述節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值1,將節(jié)點(diǎn)名類型的值寫入所述傳輸i爰存Buffer;C3、如果節(jié)點(diǎn)名類型的值為0,將節(jié)點(diǎn)名編碼寫入所述傳輸緩存Buffer;C4、如果節(jié)點(diǎn)名類型的值為1,則先將節(jié)點(diǎn)名長(zhǎng)度的值寫入所述傳輸緩存Buffer,然后將節(jié)點(diǎn)名字符串寫入所述傳輸緩存Buffer;C5、統(tǒng)計(jì)所述節(jié)點(diǎn)的節(jié)點(diǎn)屬性個(gè)數(shù),將節(jié)點(diǎn)屬性個(gè)數(shù)寫入所述傳輸緩存Buffer,如果節(jié)點(diǎn)屬性個(gè)數(shù)大于0,依次對(duì)每個(gè)節(jié)點(diǎn)屬性進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;C6、統(tǒng)計(jì)所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),將子節(jié)點(diǎn)個(gè)^t寫入所述傳輸緩存Buffer;C7、如果子節(jié)點(diǎn)個(gè)數(shù)大于0,依次對(duì)每個(gè)子節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;C8、將所述節(jié)點(diǎn)的數(shù)據(jù)長(zhǎng)度的值寫入所述傳輸緩存Buffer;C9、將所述節(jié)點(diǎn)的數(shù)據(jù)寫入所述傳輸緩存Buffer。所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其中所述步驟C5包括步驟Dl、在所述編碼表中查詢所述節(jié)點(diǎn)屬性的屬性名編碼,如果存在屬性名編碼,i殳置所述節(jié)點(diǎn)屬性的屬性名類型的值為0,否則設(shè)置所述節(jié)點(diǎn)屬性的屬性名類型的值為1,將屬性名類型的值寫入所述傳輸緩存Buffer;D2、如果屬性名類型的值為0,將屬性名編碼寫入所述傳輸緩存Buffer,否則如果屬性名類型的值為1,則先將屬性名長(zhǎng)度的值8寫入所述傳輸緩存Buffer,然后將屬性名字符串寫入所述傳輸緩存Buffer;D3、在所述編碼表中查詢所述節(jié)點(diǎn)屬性的屬性值編碼,如果存在屬性值編碼,設(shè)置所述節(jié)點(diǎn)屬性的屬性值類型的值為0,否則設(shè)置所述節(jié)點(diǎn)屬性的屬性值類型的值為1,將屬性值類型的值寫入所述傳輸緩存Buffer;D4、如果屬性值類型的值為0,將屬性值編碼寫入所述傳輸緩存Buffer,否則如果屬性值類型的值為1,則先將屬性值長(zhǎng)度的值寫入所述傳輸緩存Buffer,然后將屬性值字符串寫入所述傳輸緩存Buffer。所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其中所述步驟C7包括步驟執(zhí)行步驟C1至C9。一種XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,包括步驟El、在接收所述壓縮即時(shí)通訊信息的端點(diǎn)設(shè)置所述編碼表;E2、查詢所述編碼表,將所述壓縮即時(shí)通訊信息中的所述編碼由相應(yīng)的XMPP協(xié)議字符串替換,形成所述即時(shí)通訊信息。所述的XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,其中所述步驟E2包括步驟Fl、設(shè)置接收緩存Buffer1;F2、將所述壓縮即時(shí)通訊信息中的協(xié)議頭數(shù)據(jù)原樣寫入所述接收緩存Bufferl;F3、依次對(duì)所述壓縮即時(shí)通訊信息中的每個(gè)節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和相應(yīng)的XMPP協(xié)議字符串的替換,并將替換后的XMPP協(xié)議字符串寫入所述接收緩存Bufferl;F4、將所述壓縮即時(shí)通訊信息的擴(kuò)展數(shù)據(jù)長(zhǎng)度字段的數(shù)值和擴(kuò)展數(shù)據(jù)寫入所述接收緩存Buffer1。所述的XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,其中包括步驟E3:調(diào)用XMPP協(xié)議解析器對(duì)所述即時(shí)通訊信息進(jìn)4于解析。本發(fā)明的有益效果由于XMPP協(xié)議即時(shí)通訊信息中絕大部分是通用的字符串,因此本發(fā)明采用對(duì)常用XMPP協(xié)議字符串進(jìn)行編碼,然后通過查詢編碼表對(duì)即時(shí)通訊信息進(jìn)行壓縮,這樣就大大減少了XMPP協(xié)議即時(shí)通訊信息的數(shù)據(jù)量,并且本發(fā)明對(duì)XMPP協(xié)議進(jìn)行擴(kuò)展,增加了擴(kuò)展數(shù)據(jù)長(zhǎng)度字段和擴(kuò)展數(shù)據(jù)字段,壓縮即時(shí)通訊信息可以直接攜帶二進(jìn)制數(shù)據(jù)而不用進(jìn)行BASE64編碼的轉(zhuǎn)換,既減少了二進(jìn)制數(shù)據(jù)到BASE64編碼轉(zhuǎn)換的資源消耗,也大大減少了相應(yīng)的傳輸數(shù)據(jù)量,這樣就大大提高了即時(shí)通訊的效率,本發(fā)明是XMPP協(xié)議應(yīng)用的重大進(jìn)步。本發(fā)明包括如下附圖圖1為本發(fā)明XMPP協(xié)議即時(shí)通訊信息協(xié)議頭的數(shù)據(jù)結(jié)構(gòu)示意圖;圖2為本發(fā)明XMPP協(xié)議即時(shí)通訊信息中屬性的數(shù)據(jù)結(jié)構(gòu)示意圖;圖3為本發(fā)明XMPP協(xié)議即時(shí)通訊信息中節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)示意圖;圖4為本發(fā)明XMPP協(xié)議即時(shí)通訊信息數(shù)據(jù)結(jié)構(gòu)示意圖;圖5為本發(fā)明壓縮后即時(shí)通訊信息的示意圖;圖6為本發(fā)明應(yīng)用XMPP協(xié)議傳輸數(shù)據(jù)壓縮和解壓縮方法的交互場(chǎng)景示意圖。具體實(shí)施例方式下面根據(jù)附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明10對(duì)XMPP協(xié)議進(jìn)行充分分析后,可以總結(jié)出XMPP協(xié)議使用字符串的規(guī)律,比如請(qǐng)求節(jié)點(diǎn)名為iq,消息的節(jié)點(diǎn)名為message,等等,而且使用特殊字符串的節(jié)點(diǎn)名、命名空間、屬性名是有限的,我們可以對(duì)這些有規(guī)律的字符串進(jìn)行編碼。編碼表的建立編碼表是XMPP協(xié)議即時(shí)通訊信息壓縮和解壓縮的關(guān)鍵。根據(jù)XMPP協(xié)議的特點(diǎn),對(duì)XMPP協(xié)議中的常用字符串進(jìn)行編碼,根據(jù)整理,編碼遠(yuǎn)不到256個(gè),所以只要一個(gè)字節(jié)就可以實(shí)現(xiàn)XMPP協(xié)議中常用字符串的編碼,而且還有剩余的編碼供以后擴(kuò)展,通過編碼表代替不定長(zhǎng)的字符串?dāng)?shù)據(jù),大大減少數(shù)據(jù)量,根據(jù)XMPP協(xié)議的特點(diǎn)進(jìn)行分類編碼如下<table>tableseeoriginaldocumentpage11</column></row><table>17status狀態(tài)18priority優(yōu)先級(jí)19gone處理后20internal-server-error服務(wù)錯(cuò)誤21forbidden禁止22conflict沖突23error錯(cuò)誤24active活躍的25default默認(rèn)26value值27action行為28order命令29item-not-found指定項(xiàng)沒有找到30bad-request錯(cuò)誤請(qǐng)求31presence-out離線32service-unavailable服務(wù)不存在33identity身份34field領(lǐng)域,局部35feature特色36X節(jié)點(diǎn)x37password密碼38uscrnamc用戶名49resource資源40registration-required注冊(cè)請(qǐng)求41delay延遲42history歷史43not-acceptable不接受44invite邀請(qǐng)45decline踢人12<table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage14</column></row><table>屬性值編碼表<table>tableseeoriginaldocumentpage14</column></row><table>13jabber:iq:roster花名冊(cè)操作14jabber:x:offline離線消息15jabber:iq:agent代理工具16jabber:iq:agents有效代理組17jabber:x:delay顯示的對(duì)象18jabber:iq:version版本請(qǐng)求19jabber:iq:time時(shí)間請(qǐng)求20vcard陽(yáng)temp資料請(qǐng)求21jabber:iq:private私有數(shù)據(jù)存儲(chǔ)22jabber:iq:search査找23jabber:iq:oob綁定數(shù)據(jù)輸出24jabber:x:oob綁定數(shù)據(jù)輸出25jabber:iq:admin管理員26jabber:iq:filter過濾27jabber:iq:auth:Ok驗(yàn)證通過28jabber:iq:browse瀏覽請(qǐng)求29jabber:x:event事件消息30jabber:iq:conference會(huì)議請(qǐng)求31jabber:x:signed標(biāo)記在線狀態(tài)32jabber:x:encrypted加密消息33jabber:iqsgateway用戶地址網(wǎng)關(guān)34jabber:iq:last上次使用時(shí)間35jabber:x:envelope消息封包36jabber:x:expire消息終止37http:〃jabber.org/protoco!/muc會(huì)議室請(qǐng)求38http:〃jabber.org/protocol/muc#admin會(huì)議室管理員39http:〃jabber.org/protocol/muc#owner會(huì)議室擁有者40http:〃jabber.org/protocol/nmc弁user會(huì)議室用戶41http:〃jabber.org/protocol/muc#rooininfo會(huì)議室信箱15<table>tableseeoriginaldocumentpage16</column></row><table>壓縮過程的實(shí)現(xiàn)XML的描述符具有樹形結(jié)構(gòu),除了對(duì)常用字符編碼外,還需要對(duì)XML的格式進(jìn)行定義。XML描述符中有一個(gè)或多個(gè)節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)都包含O個(gè)或多個(gè)屬性和子節(jié)點(diǎn),父子節(jié)點(diǎn)的類型是相同的,子節(jié)點(diǎn)的描述同父節(jié)點(diǎn)一樣,節(jié)點(diǎn)的屬性描述包含對(duì)屬性名和屬性值的描述。協(xié)議頭數(shù)據(jù)壓縮過程如圖1所示,即時(shí)通訊信息協(xié)議頭的數(shù)據(jù)結(jié)構(gòu)是固定的,長(zhǎng)度為三個(gè)整型變量長(zhǎng)度,共12個(gè)字節(jié),這個(gè)協(xié)議頭為自定義協(xié)議頭,做協(xié)議標(biāo)識(shí),第一個(gè)整型存儲(chǔ)協(xié)議代碼,其中第一個(gè)字節(jié)存儲(chǔ)英文字母X的ASCII碼,第二個(gè)字節(jié)存儲(chǔ)英文字母m的ASCII碼,第三、第四個(gè)字節(jié)存儲(chǔ)英文字母p的ASCII碼,第二個(gè)整型變量為版本號(hào),為以后做版本兼容和識(shí)別處理,第三個(gè)整型變量為協(xié)議數(shù)據(jù)長(zhǎng)度。(1)首先申請(qǐng)傳輸緩存(Buffer);(2)在傳輸緩存Buffer內(nèi)寫入?yún)f(xié)議代碼;(3)在傳輸緩存Buffer內(nèi)寫入?yún)f(xié)議版本;(4)在傳輸緩存Buffer內(nèi)寫入?yún)f(xié)議數(shù)據(jù)長(zhǎng)度。屬性壓縮過程即時(shí)通訊信息中屬性的數(shù)據(jù)結(jié)構(gòu)如圖2所示。(1)在編碼表中查詢節(jié)點(diǎn)屬性的屬性值編碼,如果存在屬性值編碼,設(shè)置節(jié)點(diǎn)屬性的屬性值類型的值為0,否則設(shè)置節(jié)點(diǎn)屬性的屬性值類型的值為1,將屬性值類型的值寫入傳輸緩存Buffer;(2)如果屬性名類型的值為0,將屬性名編碼寫入傳輸緩存Buffer,否則如果屬性名類型的值為1,則先將屬性名長(zhǎng)度的值寫入傳輸緩存Buffer,然后將屬性名字符串寫入傳輸緩存Buffer;(3)在編碼表中查詢節(jié)點(diǎn)屬性的屬性值編碼,如果存在屬性值編碼,設(shè)置節(jié)點(diǎn)屬性的屬性值類型的值為0,否則設(shè)置節(jié)點(diǎn)屬性的屬性值類型的值為l,將屬性值類型的值寫入傳輸緩存Buffer;(4)如果屬性值類型的值為0,將屬性值編碼寫入傳輸緩存Buffer,否則如果屬性值類型的值為1,則先將屬性值長(zhǎng)度的值寫入傳輸緩存Buffer,然后將屬性值字符串寫入傳輸緩存Buffer。節(jié)點(diǎn)壓縮過程即時(shí)通訊信息中節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)如圖3所示。(1)在編碼表中查詢節(jié)點(diǎn)的節(jié)點(diǎn)名編碼;17(2)如果存在節(jié)點(diǎn)名編碼,設(shè)置節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值為0,否則設(shè)置節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值1,將節(jié)點(diǎn)名類型的值寫入傳輸緩存Buffer;(3)如果節(jié)點(diǎn)名類型的值為0,將節(jié)點(diǎn)名編碼寫入傳輸緩存Buffer;(4)如果節(jié)點(diǎn)名類型的值為1,則先將節(jié)點(diǎn)名長(zhǎng)度的值寫入傳輸緩存Buffer,然后將節(jié)點(diǎn)名字符串寫入傳輸緩存Buffer;(5)統(tǒng)計(jì)節(jié)點(diǎn)的節(jié)點(diǎn)屬性個(gè)數(shù),將節(jié)點(diǎn)屬性個(gè)數(shù)寫入傳輸緩存Buffer,如果節(jié)點(diǎn)屬性個(gè)數(shù)大于0,依次對(duì)每個(gè)節(jié)點(diǎn)屬性進(jìn)行編碼表的查詢和編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入傳輸緩存Buffer;(6)統(tǒng)計(jì)節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),將子節(jié)點(diǎn)個(gè)數(shù)寫入傳輸緩存Buffer;(7)如果子節(jié)點(diǎn)個(gè)數(shù)大于0,依次對(duì)每個(gè)子節(jié)點(diǎn)進(jìn)行編碼表的查詢和編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入傳輸緩存Buffer;(8)將節(jié)點(diǎn)的數(shù)據(jù)長(zhǎng)度的值寫入傳輸緩存Buffer;(9)將節(jié)點(diǎn)的數(shù)據(jù)寫入傳輸緩存Buffer。整個(gè)即時(shí)通訊信息的lt據(jù)結(jié)構(gòu)如圖4所示。調(diào)用前面敘述的各個(gè)壓縮過程來(lái)完成整個(gè)即時(shí)通訊信息的二進(jìn)制數(shù)據(jù)序列化過程,最后將擴(kuò)展數(shù)據(jù)長(zhǎng)度寫入傳輸緩存Buffer,如果長(zhǎng)度不為0,則將擴(kuò)展數(shù)據(jù)寫入傳輸緩存Buffer,最后通過網(wǎng)絡(luò)將傳輸緩存Buffer內(nèi)的數(shù)據(jù)發(fā)送出去。解壓縮過程的實(shí)現(xiàn)從網(wǎng)絡(luò)底層接收到壓縮的數(shù)據(jù)后將數(shù)據(jù)存入接收緩存RecvBuffer中,解壓縮過程其實(shí)就是壓縮一個(gè)反過程,就是把RecvBuffer中的二進(jìn)制數(shù)據(jù)進(jìn)行反序列化,把二進(jìn)制數(shù)據(jù)解析成XML流的過程。協(xié)議頭數(shù)據(jù)解壓縮過程(1)從RecvBuffer中讀取協(xié)議代碼;(2)從RecvBuffer讀取協(xié)議版本;18(3)從RecvBuffer讀取協(xié)議數(shù)據(jù)長(zhǎng)度;(4)生成一個(gè)XML節(jié)點(diǎn)類型。屬性解壓縮過程(1)乂人RecvBuffer讀取屬性名類型;(2)如果是0(編碼類型),從編碼表中找到對(duì)應(yīng)的屬性名,否則讀取屬性名長(zhǎng)度,讀取屬性名,假定屬性名為type;(3)從RecvBuffer讀取屬性值類型;(4)如果是編碼,則從編碼字典中得到屬性值,否則讀取屬性值長(zhǎng)度,讀取屬性值,假定屬性值為data;(5)在當(dāng)前的XML節(jié)點(diǎn)中添加一個(gè)屬性名為type,值為data的屬性。節(jié)點(diǎn)解壓縮過程(1)從RecvBuffer讀取節(jié)點(diǎn)名類型;(2)如果是編碼,則查詢編碼表得到真實(shí)的節(jié)點(diǎn)名,否則讀取節(jié)點(diǎn)名的長(zhǎng)度,然后直接讀取節(jié)點(diǎn)名,假定節(jié)點(diǎn)名為nodename;(3)在XML節(jié)點(diǎn)當(dāng)前層次中加入一個(gè)節(jié)點(diǎn)名為nodename的節(jié)點(diǎn)。(4)從RecvBuffer讀取屬性節(jié)點(diǎn)個(gè)數(shù);(5)如果個(gè)數(shù)不為0,循環(huán)調(diào)用屬性解壓縮過程來(lái)解壓縮屬性數(shù)據(jù);(6)從RecvBuffer讀取子節(jié)點(diǎn)個(gè)數(shù);(7)如果子節(jié)點(diǎn)個(gè)數(shù)不為O,則循環(huán)調(diào)用節(jié)點(diǎn)解壓縮過程來(lái)盡一步解壓縮;(8)從RecvBuffer讀取節(jié)點(diǎn)數(shù)據(jù)長(zhǎng)度;(9)如果長(zhǎng)度不為0,則讀取節(jié)點(diǎn)數(shù)據(jù)。整個(gè)協(xié)議數(shù)據(jù)的解壓縮過程(1)從RecvBuffer讀取協(xié)議頭數(shù)據(jù);(2)從RecvBuffer讀取節(jié)點(diǎn)個(gè)數(shù);(3)如果節(jié)點(diǎn)個(gè)數(shù)不為零,則循環(huán)調(diào)用節(jié)點(diǎn)解壓縮過程;(4)從RecvBuffer讀取擴(kuò)展數(shù)據(jù)長(zhǎng)度;(5)如杲擴(kuò)展數(shù)據(jù)長(zhǎng)度不為零,則從RecvBuffer中讀取擴(kuò)展數(shù)據(jù),如果為零則結(jié)束解壓縮過程,得到XML格式節(jié)點(diǎn)數(shù)據(jù)和擴(kuò)展數(shù)據(jù)。對(duì)于即時(shí)通訊信息<iq><queryxmlns="jabberd:iq:admin"type="get,,><query/><iq/>,共有63個(gè)字符,其壓縮后的數(shù)據(jù)格式如圖5所示,壓縮后字符數(shù)為52,除去協(xié)議頭字符數(shù)12、擴(kuò)展數(shù)據(jù)字符數(shù)8,XMPP協(xié)議數(shù)據(jù)本身為32個(gè)字符,這個(gè)協(xié)議數(shù)據(jù)比較小,所以整體數(shù)據(jù)上看不出壓縮后的比率,但除去協(xié)議附加的消息外,XMPP協(xié)議的數(shù)據(jù)壓縮將近50%(32/63*100%),當(dāng)XMPP協(xié)議數(shù)據(jù)很大時(shí),協(xié)議頭和擴(kuò)展數(shù)據(jù)占的比率就比較小,這樣壓縮比是比較高的。采取這樣的編碼后就可以在協(xié)議數(shù)據(jù)的擴(kuò)展數(shù)據(jù)部分?jǐn)y帶二進(jìn)制數(shù)據(jù),這樣非常方便,因?yàn)樵诂F(xiàn)實(shí)應(yīng)用中攜帶二進(jìn)制的需求是比較大的,現(xiàn)在的XMPP協(xié)議采用進(jìn)行BASE64的方式來(lái)傳輸二進(jìn)制,這樣不僅使傳輸數(shù)據(jù)量增加,同時(shí)在發(fā)送前和接收后都需要對(duì)數(shù)據(jù)進(jìn)行BASE64的編碼和解碼,這樣效率是相當(dāng)?shù)偷摹H鐖D6所示是使用本發(fā)明XMPP協(xié)議傳輸數(shù)據(jù)壓縮和解壓縮方法的交互場(chǎng)景1、客戶端A——〉服務(wù)器A(1)客戶段A將XML節(jié)點(diǎn)(標(biāo)準(zhǔn)XMPP格式)進(jìn)行壓縮(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送到服務(wù)器A(3)服務(wù)器A對(duì)數(shù)據(jù)進(jìn)行解壓,到得XML數(shù)據(jù)節(jié)點(diǎn)(標(biāo)準(zhǔn)的XMPP格式)。2、服務(wù)器A——〉客戶端A(1)XML節(jié)點(diǎn)數(shù)據(jù)進(jìn)行壓縮20(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送客戶端A(3)協(xié)議解壓成XML節(jié)點(diǎn)3、客戶端B—->服務(wù)器A(1)XML節(jié)點(diǎn)通過標(biāo)準(zhǔn)XML解析器解析成字符串流(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送到服務(wù)器A(3)服務(wù)器A標(biāo)準(zhǔn)XMPP協(xié)議網(wǎng)關(guān)將字符串流解析成XML節(jié)點(diǎn)4、服務(wù)器A——〉客戶端B(1)調(diào)用標(biāo)準(zhǔn)XMPP協(xié)議解析器將XML節(jié)點(diǎn)解析成字符串流(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送到客戶端B(3)通過標(biāo)準(zhǔn)XMPP協(xié)議解析器解析成XML節(jié)點(diǎn)5、客戶端A——>客戶端D(1)客戶端A將XMPP標(biāo)準(zhǔn)的XML節(jié)點(diǎn)數(shù)據(jù)進(jìn)行壓縮(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送服務(wù)器A(3)服務(wù)器A進(jìn)行協(xié)議解壓得到XML節(jié)點(diǎn)(4)調(diào)用XMPP協(xié)議解析器解析成標(biāo)準(zhǔn)字符串流(5)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送到客戶端D(6)客戶端D調(diào)用XMPP協(xié)議解析器解析成XML節(jié)點(diǎn)6、客戶端A--—>路由器1——>客戶端B(1)客戶端A將XMPP標(biāo)準(zhǔn)的XML節(jié)點(diǎn)數(shù)據(jù)進(jìn)行壓縮(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送路由器1(3)路由器1進(jìn)行協(xié)議解壓得到XML節(jié)點(diǎn)(4)路由器調(diào)用XMPP協(xié)議解析器解析成標(biāo)準(zhǔn)字符串流(5)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送到客戶B(6)客戶端B調(diào)用XMPP標(biāo)準(zhǔn)協(xié)議解析器解析成XML節(jié)點(diǎn)217、客戶端B——>路由器1——>客戶端A(1)客戶端B調(diào)用XMPP解析器將XML節(jié)點(diǎn)解析成字符串流(2)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送路由器1(3)路由器1進(jìn)行協(xié)議進(jìn)行解析得到XML節(jié)點(diǎn)(4)路由器1調(diào)用協(xié)議壓縮模塊將協(xié)議進(jìn)行壓縮(5)通過網(wǎng)絡(luò)TCP/IP協(xié)議將數(shù)據(jù)發(fā)送客戶端A(6)客戶端A對(duì)協(xié)議進(jìn)行解壓得到XML節(jié)點(diǎn)本領(lǐng)域技術(shù)人員不脫離本發(fā)明的實(shí)質(zhì)和精神,可以有多種變形方案實(shí)現(xiàn)本發(fā)明,以上所述僅為本發(fā)明較佳可行的實(shí)施例而已,并非因此局限本發(fā)明的權(quán)利范圍,凡運(yùn)用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)變化,均包含于本發(fā)明的權(quán)利范圍之內(nèi)。權(quán)利要求1、一種XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于,包括步驟A1、將XMPP協(xié)議使用的字符串分別進(jìn)行編碼,所述編碼組成編碼表;A2、在傳輸XMPP協(xié)議即時(shí)通訊信息時(shí),查詢所述編碼表,將所述即時(shí)通訊信息中的XMPP協(xié)議字符串由相應(yīng)的所述編碼替換,形成壓縮即時(shí)通訊信息;A3、傳輸所述壓縮即時(shí)通訊信息。2、根據(jù)權(quán)利要求1所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于所述編碼的字寬設(shè)為一個(gè)字節(jié)。3、根據(jù)權(quán)利要求1所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于,所述步驟A2包括步驟Bl、設(shè)置傳輸緩存Buffer;B2、將所述即時(shí)通訊信息中的協(xié)議頭數(shù)據(jù)原樣寫入所述傳輸緩存Buffer;B3、依次對(duì)所述即時(shí)通訊信息中的每個(gè)節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;B4、將所述即時(shí)通訊信息中的擴(kuò)展數(shù)據(jù)長(zhǎng)度字段的數(shù)值和擴(kuò)展數(shù)據(jù)'寫入所述傳輸緩存Buffer。4、根據(jù)權(quán)利要求3所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于,所述步驟B3包括步驟Cl、在所述編碼表中查詢所述節(jié)點(diǎn)的節(jié)點(diǎn)名編碼;C2、如果存在節(jié)點(diǎn)名編碼,設(shè)置所述節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值為0,否則設(shè)置所述節(jié)點(diǎn)的節(jié)點(diǎn)名類型的值1,將節(jié)點(diǎn)名類型的值寫入所述傳輸緩存Buffer;C3、如果節(jié)點(diǎn)名類型的值為0,將節(jié)點(diǎn)名編碼寫入所述傳輸緩存Buffer;C4、如果節(jié)點(diǎn)名類型的值為1,則先將節(jié)點(diǎn)名長(zhǎng)度的值寫入所述傳輸緩存Buffer,然后將節(jié)點(diǎn)名字符串寫入所述傳輸緩存Buffer;C5、統(tǒng)計(jì)所述節(jié)點(diǎn)的節(jié)點(diǎn)屬性個(gè)數(shù),將節(jié)點(diǎn)屬性個(gè)數(shù)寫入所述傳輸緩存Buffer,如果節(jié)點(diǎn)屬性個(gè)數(shù)大于0,依次對(duì)每個(gè)節(jié)點(diǎn)屬性進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;C6、統(tǒng)計(jì)所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),將子節(jié)點(diǎn)個(gè)數(shù)寫入所述傳輸緩存Buffer;C7、如果子節(jié)點(diǎn)個(gè)數(shù)大于0,依次對(duì)每個(gè)子節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和所述編碼的替換,并將替換后的壓縮數(shù)據(jù)寫入所述傳輸緩存Buffer;C8、將所述節(jié)點(diǎn)的數(shù)據(jù)長(zhǎng)度的值寫入所述傳輸緩存Buffer;C9、將所述節(jié)點(diǎn)的數(shù)據(jù)寫入所述傳輸緩存Buffer。5、根據(jù)權(quán)利要求4所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于,所述步驟C5包括步驟Dl、在所述編碼表中查詢所述節(jié)點(diǎn)屬性的屬性名編碼,如果存在屬性名編碼,設(shè)置所述節(jié)點(diǎn)屬性的屬性名類型的值為0,否則設(shè)置所述節(jié)點(diǎn)屬性的屬性名類型的值為1,將屬性名類型的值寫入所述傳輸緩存Buffer;D2、如果屬性名類型的值為0,將屬性名編碼寫入所述傳輸緩存Buffer,否則如果屬性名類型的值為1,則先將屬性名長(zhǎng)度的值寫入所述傳輸緩存Buffer,然后將屬性名字符串寫入所述傳輸緩存Buffer;D3、在所述編碼表中查詢所述節(jié)點(diǎn)屬性的屬性值編碼,如果存在屬性值編碼,設(shè)置所述節(jié)點(diǎn)屬性的屬性值類型的值為0,否則設(shè)置所述節(jié)點(diǎn)屬性的屬性值類型的值為1,將屬性值類型的值寫入所述傳輸緩存Buffer;D4、如果屬性值類型的值為0,將屬性值編碼寫入所述傳輸緩存Buffer,否則如果屬性值類型的值為1,則先將屬性值長(zhǎng)度的值寫入所述傳輸緩存Buffer,然后將屬性值字符串寫入所述傳輸緩存Buffer。6、根據(jù)權(quán)利要求4所述的XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,其特征在于,所述步驟C7包括步驟執(zhí)行步驟C1至C9。7、一種XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,其特征在于,包括步驟El、在接收所述壓縮即時(shí)通訊信息的端點(diǎn)設(shè)置所述編碼表;E2、查詢所述編碼表,將所述壓縮即時(shí)通訊信息中的所述編碼由相應(yīng)的XMPP協(xié)議字符串替換,形成所述即時(shí)通訊信息。8、根據(jù)權(quán)利要求7所述的XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,其特征在于,所述步驟E2包括步驟Fl、設(shè)置接收緩存Buffer1;F2、將所述壓縮即時(shí)通訊信息中的協(xié)議頭數(shù)據(jù)原樣寫入所述接收緩存Bufferl;F3、依次對(duì)所述壓縮即時(shí)通訊信息中的每個(gè)節(jié)點(diǎn)進(jìn)行所述編碼表的查詢和相應(yīng)的XMPP協(xié)議字符串的替換,并將替換后的XMPP協(xié)議字符串寫入所述接收緩存Bufferl;F4、將所述壓縮即時(shí)通訊信息的擴(kuò)展數(shù)據(jù)長(zhǎng)度字段的數(shù)值和擴(kuò)展數(shù)據(jù)寫入所述接收緩存Bufferl。9、根據(jù)權(quán)利要求7所述的XMPP協(xié)議傳輸數(shù)據(jù)解壓縮方法,其特征在于,包括步驟E3:調(diào)用XMPP協(xié)議解析器對(duì)所述即時(shí)通訊信息進(jìn)行解析。全文摘要本發(fā)明公開了一種XMPP協(xié)議傳輸數(shù)據(jù)壓縮方法,包括步驟A1.將XMPP協(xié)議使用的字符串分別進(jìn)行編碼,所述編碼組成編碼表;A2.在傳輸XMPP協(xié)議即時(shí)通訊信息時(shí),查詢所述編碼表,將所述即時(shí)通訊信息中的XMPP協(xié)議字符串由相應(yīng)的所述編碼替換,形成壓縮即時(shí)通訊信息;A3.傳輸所述壓縮即時(shí)通訊信息。文檔編號(hào)H04L12/58GK101557399SQ20091010736公開日2009年10月14日申請(qǐng)日期2009年5月20日優(yōu)先權(quán)日2009年5月20日發(fā)明者張代軍,朱懋柱申請(qǐng)人:深圳市匯??萍奸_發(fā)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
正定县| 济南市| 保亭| 鲜城| 姜堰市| 九龙县| 普格县| 通道| 深泽县| 绥芬河市| 金川县| 玉林市| 莱芜市| 望谟县| 青神县| 毕节市| 遂溪县| 延津县| 信丰县| 汪清县| 新乐市| 若尔盖县| 包头市| 垦利县| 云阳县| 平顶山市| 平利县| 河西区| 建昌县| 邵东县| 开平市| 罗田县| 奉新县| 青阳县| 盘锦市| 博湖县| 清水县| 富宁县| 庐江县| 岫岩| 佛冈县|