《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于XMPP協(xié)議的XML數(shù)據(jù)流壓縮模型研究
基于XMPP協(xié)議的XML數(shù)據(jù)流壓縮模型研究
2016年微型機(jī)與應(yīng)用第1期
齊鋮1,2,吳靜1,2
(1.西南科技大學(xué) 信息工程學(xué)院,四川 綿陽(yáng) 621010; 2.特殊環(huán)境機(jī)器人技術(shù)四川省重點(diǎn)實(shí)驗(yàn)室,四川 綿陽(yáng) 621010)
摘要: XMPP協(xié)議作為基于XML數(shù)據(jù)流的即時(shí)通信協(xié)議,可用于構(gòu)建統(tǒng)一、高效的智能家居監(jiān)控消息推送方案。針對(duì)XMPP協(xié)議存在的流量冗余較大的不足,提出了一種基于容器模型和BWT變換思想的XMPP數(shù)據(jù)流壓縮模型。該模型通過(guò)對(duì)XML數(shù)據(jù)流的容器劃分、前綴編碼和預(yù)處理,在單次掃描數(shù)據(jù)流的基礎(chǔ)上達(dá)到壓縮率的最大化。實(shí)驗(yàn)證明,該模型方案能有效節(jié)約XMPP協(xié)議通信過(guò)程產(chǎn)生的網(wǎng)絡(luò)流量,并具有可行性。
Abstract:
Key words :

  摘要XMPP協(xié)議作為基于XML數(shù)據(jù)流的即時(shí)通信協(xié)議,可用于構(gòu)建統(tǒng)一、高效的智能家居監(jiān)控消息推送方案。針對(duì)XMPP協(xié)議存在的流量冗余較大的不足,提出了一種基于容器模型BWT變換思想的XMPP數(shù)據(jù)流壓縮模型。該模型通過(guò)對(duì)XML數(shù)據(jù)流的容器劃分、前綴編碼和預(yù)處理,在單次掃描數(shù)據(jù)流的基礎(chǔ)上達(dá)到壓縮率的最大化。實(shí)驗(yàn)證明,該模型方案能有效節(jié)約XMPP協(xié)議通信過(guò)程產(chǎn)生的網(wǎng)絡(luò)流量,并具有可行性。

  關(guān)鍵詞:XMPP協(xié)議;流壓縮;容器模型;BWT

0引言

  在智能家居系統(tǒng)的應(yīng)用背景中,通過(guò)手機(jī)等移動(dòng)終端對(duì)設(shè)備進(jìn)行遠(yuǎn)程控制、監(jiān)測(cè)是基本需求。XMPP協(xié)議(Extensible Messaging and Presence Protocol)是基于XML的開(kāi)放可擴(kuò)展協(xié)議,用于在兩個(gè)或多個(gè)網(wǎng)絡(luò)實(shí)體之間進(jìn)行結(jié)構(gòu)化和可擴(kuò)展的實(shí)時(shí)信息交流。將該協(xié)議引入智能家居控制領(lǐng)域,可以為異構(gòu)設(shè)備群組成的家居體系提供統(tǒng)一的通信標(biāo)準(zhǔn)。但是XML格式數(shù)據(jù)流中大量的結(jié)構(gòu)信息造成了較大的流量冗余,給移動(dòng)控制終端造成了較大的網(wǎng)絡(luò)流量消耗。因此,基于提高協(xié)議的運(yùn)行效率、消除其流量冗余的考慮,應(yīng)該對(duì)協(xié)議雙方通信過(guò)程中產(chǎn)生的數(shù)據(jù)流進(jìn)行有效的壓縮[1]。

  現(xiàn)有的XML壓縮工具,如XMill、XGrind、Xpress等都是針對(duì)靜態(tài)XML文檔,對(duì)動(dòng)態(tài)數(shù)據(jù)流的支持不理想[2]。王騰蛟等提出了一種XSC壓縮算法,該方法借助DTD和字典壓縮思想構(gòu)建高效的索引完成對(duì)數(shù)據(jù)流的實(shí)時(shí)壓縮[3]。張曉琳等提出了一種基于動(dòng)態(tài)Huffman編碼的XML數(shù)據(jù)流壓縮技術(shù),該算法利用XML Schema和動(dòng)態(tài)樹(shù)結(jié)構(gòu)進(jìn)行編碼,達(dá)到壓縮目的[4]。本文根據(jù)XMPP協(xié)議數(shù)據(jù)流傳輸?shù)奶攸c(diǎn),結(jié)合容器劃分理念和BWT的思想,構(gòu)建了一種基于容器模型和BWT預(yù)處理的非對(duì)稱(chēng)XML數(shù)據(jù)流壓縮方法。該方法單次掃描數(shù)據(jù)流,不用借助DTD和XML Schema等格式定義文檔,并有較好的壓縮效率。

1XML數(shù)據(jù)流壓縮算法的設(shè)計(jì)和實(shí)現(xiàn)

  1.1XML數(shù)據(jù)流壓縮算法的原理

  本算法針對(duì)實(shí)時(shí)傳輸?shù)腦ML數(shù)據(jù)流,結(jié)合XML數(shù)據(jù)格式的特點(diǎn),考慮將數(shù)據(jù)流中的相關(guān)節(jié)點(diǎn)利用SAX解析器解析形成觸發(fā)事件流,并觸發(fā)對(duì)應(yīng)的處理程序,處理程序結(jié)合靜態(tài)存儲(chǔ)的字典,利用前綴索引編碼將數(shù)據(jù)分別存放到對(duì)應(yīng)結(jié)構(gòu)的結(jié)構(gòu)容器和對(duì)應(yīng)內(nèi)容的內(nèi)容容器中,達(dá)到結(jié)構(gòu)與內(nèi)容分離的目的。然后,將分離的每個(gè)容器中的內(nèi)容進(jìn)行BWT變換的預(yù)處理,變換的目的是將容器內(nèi)相關(guān)語(yǔ)義的編碼盡量靠攏,減小信息熵,這樣可以有效地提高對(duì)內(nèi)容進(jìn)行字典壓縮的壓縮率。

  算法的整體框架圖如圖1所示?!?/p>

001.jpg

  1.2基于改進(jìn)的字典編碼的容器劃分模型

  1.2.1數(shù)據(jù)流容器劃分思想

  容器劃分模型參考了標(biāo)準(zhǔn)XMill壓縮器的思想,XML數(shù)據(jù)流經(jīng)過(guò)SAX解析器后,數(shù)據(jù)流被解析成觸發(fā)事件流,根據(jù)傳輸?shù)腦ML流中的結(jié)構(gòu)和數(shù)據(jù)部分觸發(fā)事件的不同,將數(shù)據(jù)流中的結(jié)構(gòu)部分和數(shù)據(jù)部分[5]按靜態(tài)字典與前綴索引結(jié)合的方式進(jìn)行編碼,分別進(jìn)行收集和壓縮??紤]到XMPP協(xié)議是基于規(guī)范性和統(tǒng)一性格式的,即協(xié)議傳遞的數(shù)據(jù)包中的XML元素標(biāo)簽和屬性標(biāo)簽是固定的,一段通信過(guò)程的協(xié)議格式為:

  <stream><iq id="AicmY-2" type="get"></iq>

  <presence id="w5w3U-3" to="test2@127001/Smack" from="test1@127001/Smack"/>

  <message id="chat packet" to="test2@127001" from="test1@127001/Smack" type="chat">

  <body>uid=1&devid=2&ordercode=3&ordervalue=34</body></message></stream>

  stream標(biāo)簽標(biāo)志一段數(shù)據(jù)流的開(kāi)始。<message>、<present>、<iq>元素稱(chēng)為XML節(jié),每個(gè)節(jié)點(diǎn)下對(duì)應(yīng)<to>、<from>、<body>等屬性標(biāo)簽,設(shè)置了一個(gè)消息片段的發(fā)送方、接收方以及消息實(shí)體等信息[6]。協(xié)議傳輸?shù)腦ML數(shù)據(jù)流的元素/屬性節(jié)點(diǎn)類(lèi)型是固定的,因此可以在通信雙方內(nèi)存中構(gòu)建靜態(tài)字典,字典的鍵為自定義的索引標(biāo)號(hào),值為協(xié)議對(duì)應(yīng)的XML元素/屬性節(jié)點(diǎn)內(nèi)容。在數(shù)據(jù)部分,數(shù)據(jù)以原始形態(tài)被分配到字符容器中。利用相應(yīng)的壓縮算法對(duì)每個(gè)容器進(jìn)行處理。容器劃分模型的流程圖如圖2所示。

002.jpg

  1.2.2結(jié)構(gòu)索引字典編碼

  一般常用的字典編碼壓縮方法,為了算法的實(shí)時(shí)性,往往選擇動(dòng)態(tài)構(gòu)建字典的形式,這在處理大型的內(nèi)容未知的靜態(tài)XML文檔時(shí)是一種較好的處理方式[7]。但常規(guī)字典編碼方案在動(dòng)態(tài)構(gòu)建字典時(shí)會(huì)消耗較多時(shí)間。對(duì)于XMPP協(xié)議支持的通信雙方實(shí)時(shí)傳輸?shù)臄?shù)據(jù)流,基于協(xié)議結(jié)構(gòu)節(jié)點(diǎn)固定這一特性,考慮采用事先設(shè)定好的靜態(tài)字典形式,并在編碼字典索引中加入前綴索引以便接受方快速定位每一個(gè)XML節(jié)中的信息體。通過(guò)上一節(jié)抓取的實(shí)際XMPP數(shù)據(jù)流闡述改進(jìn)的字典編碼步驟。該數(shù)據(jù)流展示了XMPP客戶(hù)端test1向test2發(fā)送一段消息指令,內(nèi)容為:“uid=1&devid=2&ordercode=3&ordervalue=26”。數(shù)據(jù)流經(jīng)過(guò)SAX解析器后,由SAX的事件觸發(fā)機(jī)制,將數(shù)據(jù)流按觸發(fā)事件的不同分別引入元素、屬性和內(nèi)容三個(gè)容器中。

  根據(jù)上一節(jié)所述,設(shè)定一個(gè)靜態(tài)的結(jié)構(gòu)字典,如表1所示,結(jié)構(gòu)字典中包含有標(biāo)準(zhǔn)XMPP協(xié)議中定義的全部XML節(jié)。

003.jpg

  根據(jù)表1所示的靜態(tài)結(jié)構(gòu)字典,可以方便地將數(shù)據(jù)流中的“結(jié)構(gòu)信息”進(jìn)行字典順序編碼并得到如下結(jié)果:0a 1a 1d ff 0b 1a 1b 1c 0b 1a 1b 1c 0c 1a 1b 1c 1d 0d ff 0e ff ff;通過(guò)對(duì)以上結(jié)果的分析可以發(fā)現(xiàn),因?yàn)閰f(xié)議數(shù)據(jù)流中元素的嵌套結(jié)構(gòu)較多,而“屬性”結(jié)構(gòu)通過(guò)簡(jiǎn)單的字典編碼并不能確定其具體屬于哪一個(gè)元素。因此,本文考慮在對(duì)數(shù)據(jù)流的結(jié)構(gòu)信息進(jìn)行基礎(chǔ)的字典編碼時(shí),動(dòng)態(tài)加入與其所屬的元素對(duì)應(yīng)的前綴索引信息,如表2。

004.jpg

  包含前綴索引的字典編碼按容器劃分方法依次填入相關(guān)容器,以message節(jié)點(diǎn)為例,最終容器劃分結(jié)果以及各容器中的數(shù)據(jù)如表3所示。

005.jpg

  1.3BWT變換思想

  BWT變換也稱(chēng)作塊排序,是一種針對(duì)一個(gè)數(shù)據(jù)塊的排序壓縮方法,其目的是將數(shù)據(jù)塊中出現(xiàn)頻率較高、重復(fù)出現(xiàn)的數(shù)據(jù)段盡量整合到一起。其核心思想是對(duì)目標(biāo)數(shù)據(jù)塊中的內(nèi)容進(jìn)行矩陣變換。BWT變換本身并不會(huì)減小數(shù)據(jù)塊的大小,只是改變了排序順序[8]。根據(jù)信息論中關(guān)于信源信息熵的定義,將一個(gè)隨機(jī)變量的熵表示為:

  H(x)=H(P1,P2,…,Pn)=∑ni=1P(xi)logP(xi)(1)

  其中P(xi)為信源取第i個(gè)符號(hào)的概率。

  根據(jù)數(shù)據(jù)壓縮的原理,假設(shè)一個(gè)包含n個(gè)字符的字符串,每個(gè)字符的出現(xiàn)概率為p1,p2…pn,那么經(jīng)過(guò)任何壓縮算法后的二進(jìn)制占位至少為:

  9~~UE`N~P68WY_43~LXTD`8.png

  式(2)的結(jié)果可理解為字符串的壓縮極限:∑log2(1/pn)??梢?jiàn),對(duì)于長(zhǎng)度相同的數(shù)據(jù),p決定了壓縮極限的大小,p越大表明文件越有規(guī)律,其壓縮極限越?。?]。根據(jù)實(shí)驗(yàn)可以發(fā)現(xiàn),經(jīng)過(guò)BWT變換的數(shù)據(jù)塊,相同的字符會(huì)趨向于聚集在一起,信息熵比原始數(shù)據(jù)源小,因此有更小的壓縮極限值。

  BWT變換基于字符串矩陣的變換。假設(shè)輸入的數(shù)據(jù)為字符串:“ABCACBBD”,使用BWT變換對(duì)該字符串進(jìn)行預(yù)處理,步驟如下:

 ?。?)構(gòu)造N×N矩陣O,O中每一行是原字符串依次左移構(gòu)成。

 ?。?)對(duì)O矩陣中的行按字典順序遞減重新排列,得到矩陣O′。

 ?。?)輸出O′矩陣的最后一列以及原字符串在O′矩陣中的行數(shù),即(L,index)=([DCCABBAB],1),可方便進(jìn)行反變換以還原原字符串。

  BWT變換將出現(xiàn)頻率較高的字母排列在一起。以常規(guī)LZW編碼為例,一段160 B的數(shù)據(jù)的原字符串與BWT變換后的字符經(jīng)過(guò)LZW編碼后的壓縮率分別為80%和7125%,有明顯提升。XMPP協(xié)議傳輸?shù)臄?shù)據(jù)流具有較多的重復(fù)字符,適合將BWT變換引入其中作為常規(guī)數(shù)據(jù)壓縮前的預(yù)處理。在接收實(shí)體接收到經(jīng)過(guò)BWT變換的內(nèi)容后,根據(jù)前序查找的方法,以原字符串末尾為起始,可以還原字符串。

2算法的測(cè)試和應(yīng)用

  對(duì)上述容器劃分模型在Intel Core i5/31 GHz的PC上進(jìn)行試驗(yàn)驗(yàn)證,運(yùn)行環(huán)境為Windows7旗艦版操作系統(tǒng)。實(shí)驗(yàn)使用的服務(wù)器端為openfire393,使用的客戶(hù)端為基于Smack開(kāi)發(fā)包開(kāi)發(fā)的模擬用戶(hù)端。數(shù)據(jù)源為抓包軟件采集的智能空調(diào)設(shè)備與手機(jī)App之間的監(jiān)測(cè)、控制數(shù)據(jù)流。

006.jpg

  通過(guò)表4對(duì)比可見(jiàn),采用了本文所述的壓縮方案后,網(wǎng)絡(luò)中傳輸?shù)囊粋€(gè)完整通信過(guò)程所需的數(shù)據(jù)流大小與原始數(shù)據(jù)流相比有了明顯減小。

  模擬用戶(hù)對(duì)智能設(shè)備進(jìn)行控制并接收設(shè)備上報(bào)的監(jiān)測(cè)信息,設(shè)備每10 s上報(bào)一次實(shí)時(shí)數(shù)據(jù),用戶(hù)每分鐘對(duì)設(shè)備發(fā)送一條控制指令。通過(guò)“科來(lái)”網(wǎng)絡(luò)流量監(jiān)測(cè)軟件對(duì)一個(gè)時(shí)段內(nèi)流經(jīng)協(xié)議端口5222的數(shù)據(jù)流量在不經(jīng)過(guò)壓縮處理、經(jīng)過(guò)基本LZW編碼壓縮處理和經(jīng)過(guò)本文壓縮模型處理后的統(tǒng)計(jì)如圖3所示?! ?/p>

007.jpg

  可見(jiàn)經(jīng)過(guò)本文設(shè)計(jì)的壓縮模型改進(jìn)的服務(wù)器端,通信協(xié)議產(chǎn)生的網(wǎng)絡(luò)流量與原始服務(wù)器和啟用了默認(rèn)LZW壓縮方案的服務(wù)器端相比有了一定的減少,且隨著時(shí)間的增加,流量節(jié)約更加明顯。

3結(jié)論

  本文針對(duì)XMPP協(xié)議數(shù)據(jù)流量冗余的問(wèn)題,提出了一種使用于XML數(shù)據(jù)流的基于改進(jìn)的字典編碼的容器劃分模型算法,該算法可以在不破壞協(xié)議實(shí)時(shí)性的基礎(chǔ)上,對(duì)XMPP協(xié)議通信雙方的XML流進(jìn)行結(jié)構(gòu)索引字典編碼,分結(jié)構(gòu)和內(nèi)容分別進(jìn)行壓縮,同時(shí)針對(duì)信息體中重復(fù)字符較多的特點(diǎn)對(duì)信息體采用BWT編碼預(yù)處理。實(shí)驗(yàn)證明,基于改進(jìn)的字典編碼的容器劃分模型可以有效減少XML數(shù)據(jù)流的冗余,達(dá)到節(jié)約網(wǎng)絡(luò)流量的目的。適用于需要長(zhǎng)連接的智能家居檢測(cè)、控制系統(tǒng)中。

  參考文獻(xiàn)

 ?。?] 劉涌,張彥功,梁崑濤. 移動(dòng)設(shè)備上 XMPP 功耗與帶寬的研究[J]. 小型微型計(jì)算機(jī)系統(tǒng),2013,34(2):272-276.

 ?。?] 鐘世明,邵銳,張勝,等. 基于位置服務(wù)系統(tǒng)中XML數(shù)據(jù)流壓縮方法[J]. 武漢理工大學(xué)學(xué)報(bào),2006,30(1):29-32.

 ?。?] 王騰蛟,高軍,楊冬青,等. 面向 XPath 執(zhí)行的 XML 數(shù)據(jù)流壓縮方法[J]. 軟件學(xué)報(bào),2005,16(5):870-877.

 ?。?] 張曉琳,翟國(guó)峰,譚躍生,等. 基于動(dòng)態(tài)哈夫曼編碼的XML數(shù)據(jù)流壓縮技術(shù)[J]. 內(nèi)蒙古科技大學(xué)學(xué)報(bào),2007,26(4):332-336.

 ?。?] 李瑞. XMLPre:一種基于預(yù)處理的XML壓縮算法[D]. 西安:西安電子科技大學(xué),2014.

 ?。?] 周文瓊,王樂(lè)球,周桐,等. 基于XMPP 的企業(yè)即時(shí)通信系統(tǒng)研究與應(yīng)用[J]. 吉林大學(xué)學(xué)報(bào),2010,28(1):108-111.

 ?。?] 許霞,馬光思,魚(yú)濤. LZW 無(wú)損壓縮算法的研究與改進(jìn)[J]. 計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(4):126-127.

 ?。?] 王磊,孟昭鵬,劉亞瓊. 一種基于LFU置換的BWT壓縮算法的改進(jìn)[J]. 微計(jì)算機(jī)應(yīng)用,2008,29(3):80-83.

 ?。?] 鄧宏貴,王晉秀,曹莉凌,等. 基于 BWT 改進(jìn)的 LZW 算法在傳感器網(wǎng)絡(luò)中的應(yīng)用[J].傳感技術(shù)學(xué)報(bào),2008,21(6):1048-1051.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。