摘要:XMPP協議作為基于XML數據流的即時通信協議,可用于構建統一、高效的智能家居監控消息推送方案。針對XMPP協議存在的流量冗余較大的不足,提出了一種基于容器模型和BWT變換思想的XMPP數據流壓縮模型。該模型通過對XML數據流的容器劃分、前綴編碼和預處理,在單次掃描數據流的基礎上達到壓縮率的最大化。實驗證明,該模型方案能有效節約XMPP協議通信過程產生的網絡流量,并具有可行性。
關鍵詞:XMPP協議;流壓縮;容器模型;BWT
0引言
在智能家居系統的應用背景中,通過手機等移動終端對設備進行遠程控制、監測是基本需求。XMPP協議(Extensible Messaging and Presence Protocol)是基于XML的開放可擴展協議,用于在兩個或多個網絡實體之間進行結構化和可擴展的實時信息交流。將該協議引入智能家居控制領域,可以為異構設備群組成的家居體系提供統一的通信標準。但是XML格式數據流中大量的結構信息造成了較大的流量冗余,給移動控制終端造成了較大的網絡流量消耗。因此,基于提高協議的運行效率、消除其流量冗余的考慮,應該對協議雙方通信過程中產生的數據流進行有效的壓縮[1]。
現有的XML壓縮工具,如XMill、XGrind、Xpress等都是針對靜態XML文檔,對動態數據流的支持不理想[2]。王騰蛟等提出了一種XSC壓縮算法,該方法借助DTD和字典壓縮思想構建高效的索引完成對數據流的實時壓縮[3]。張曉琳等提出了一種基于動態Huffman編碼的XML數據流壓縮技術,該算法利用XML Schema和動態樹結構進行編碼,達到壓縮目的[4]。本文根據XMPP協議數據流傳輸的特點,結合容器劃分理念和BWT的思想,構建了一種基于容器模型和BWT預處理的非對稱XML數據流壓縮方法。該方法單次掃描數據流,不用借助DTD和XML Schema等格式定義文檔,并有較好的壓縮效率。
1XML數據流壓縮算法的設計和實現
1.1XML數據流壓縮算法的原理
本算法針對實時傳輸的XML數據流,結合XML數據格式的特點,考慮將數據流中的相關節點利用SAX解析器解析形成觸發事件流,并觸發對應的處理程序,處理程序結合靜態存儲的字典,利用前綴索引編碼將數據分別存放到對應結構的結構容器和對應內容的內容容器中,達到結構與內容分離的目的。然后,將分離的每個容器中的內容進行BWT變換的預處理,變換的目的是將容器內相關語義的編碼盡量靠攏,減小信息熵,這樣可以有效地提高對內容進行字典壓縮的壓縮率。
算法的整體框架圖如圖1所示。
1.2基于改進的字典編碼的容器劃分模型
1.2.1數據流容器劃分思想
容器劃分模型參考了標準XMill壓縮器的思想,XML數據流經過SAX解析器后,數據流被解析成觸發事件流,根據傳輸的XML流中的結構和數據部分觸發事件的不同,將數據流中的結構部分和數據部分[5]按靜態字典與前綴索引結合的方式進行編碼,分別進行收集和壓縮。考慮到XMPP協議是基于規范性和統一性格式的,即協議傳遞的數據包中的XML元素標簽和屬性標簽是固定的,一段通信過程的協議格式為:
<stream><iq id="AicmY-2" type="get"></iq>
<presence id="w5w3U-3" to="test2@127001/Smack" from="test1@127001/Smack"/>
<message id="chat packet" to="test2@127001" from="test1@127001/Smack" type="chat">
<body>uid=1&devid=2&ordercode=3&ordervalue=34</body></message></stream>
stream標簽標志一段數據流的開始。<message>、<present>、<iq>元素稱為XML節,每個節點下對應<to>、<from>、<body>等屬性標簽,設置了一個消息片段的發送方、接收方以及消息實體等信息[6]。協議傳輸的XML數據流的元素/屬性節點類型是固定的,因此可以在通信雙方內存中構建靜態字典,字典的鍵為自定義的索引標號,值為協議對應的XML元素/屬性節點內容。在數據部分,數據以原始形態被分配到字符容器中。利用相應的壓縮算法對每個容器進行處理。容器劃分模型的流程圖如圖2所示。
1.2.2結構索引字典編碼
一般常用的字典編碼壓縮方法,為了算法的實時性,往往選擇動態構建字典的形式,這在處理大型的內容未知的靜態XML文檔時是一種較好的處理方式[7]。但常規字典編碼方案在動態構建字典時會消耗較多時間。對于XMPP協議支持的通信雙方實時傳輸的數據流,基于協議結構節點固定這一特性,考慮采用事先設定好的靜態字典形式,并在編碼字典索引中加入前綴索引以便接受方快速定位每一個XML節中的信息體。通過上一節抓取的實際XMPP數據流闡述改進的字典編碼步驟。該數據流展示了XMPP客戶端test1向test2發送一段消息指令,內容為:“uid=1&devid=2&ordercode=3&ordervalue=26”。數據流經過SAX解析器后,由SAX的事件觸發機制,將數據流按觸發事件的不同分別引入元素、屬性和內容三個容器中。
根據上一節所述,設定一個靜態的結構字典,如表1所示,結構字典中包含有標準XMPP協議中定義的全部XML節。
根據表1所示的靜態結構字典,可以方便地將數據流中的“結構信息”進行字典順序編碼并得到如下結果:0a 1a 1d ff 0b 1a 1b 1c 0b 1a 1b 1c 0c 1a 1b 1c 1d 0d ff 0e ff ff;通過對以上結果的分析可以發現,因為協議數據流中元素的嵌套結構較多,而“屬性”結構通過簡單的字典編碼并不能確定其具體屬于哪一個元素。因此,本文考慮在對數據流的結構信息進行基礎的字典編碼時,動態加入與其所屬的元素對應的前綴索引信息,如表2。
包含前綴索引的字典編碼按容器劃分方法依次填入相關容器,以message節點為例,最終容器劃分結果以及各容器中的數據如表3所示。
1.3BWT變換思想
BWT變換也稱作塊排序,是一種針對一個數據塊的排序壓縮方法,其目的是將數據塊中出現頻率較高、重復出現的數據段盡量整合到一起。其核心思想是對目標數據塊中的內容進行矩陣變換。BWT變換本身并不會減小數據塊的大小,只是改變了排序順序[8]。根據信息論中關于信源信息熵的定義,將一個隨機變量的熵表示為:
H(x)=H(P1,P2,…,Pn)=∑ni=1P(xi)logP(xi)(1)
其中P(xi)為信源取第i個符號的概率。
根據數據壓縮的原理,假設一個包含n個字符的字符串,每個字符的出現概率為p1,p2…pn,那么經過任何壓縮算法后的二進制占位至少為:
式(2)的結果可理解為字符串的壓縮極限:∑log2(1/pn)。可見,對于長度相同的數據,p決定了壓縮極限的大小,p越大表明文件越有規律,其壓縮極限越小[9]。根據實驗可以發現,經過BWT變換的數據塊,相同的字符會趨向于聚集在一起,信息熵比原始數據源小,因此有更小的壓縮極限值。
BWT變換基于字符串矩陣的變換。假設輸入的數據為字符串:“ABCACBBD”,使用BWT變換對該字符串進行預處理,步驟如下:
(1)構造N×N矩陣O,O中每一行是原字符串依次左移構成。
(2)對O矩陣中的行按字典順序遞減重新排列,得到矩陣O′。
(3)輸出O′矩陣的最后一列以及原字符串在O′矩陣中的行數,即(L,index)=([DCCABBAB],1),可方便進行反變換以還原原字符串。
BWT變換將出現頻率較高的字母排列在一起。以常規LZW編碼為例,一段160 B的數據的原字符串與BWT變換后的字符經過LZW編碼后的壓縮率分別為80%和7125%,有明顯提升。XMPP協議傳輸的數據流具有較多的重復字符,適合將BWT變換引入其中作為常規數據壓縮前的預處理。在接收實體接收到經過BWT變換的內容后,根據前序查找的方法,以原字符串末尾為起始,可以還原字符串。
2算法的測試和應用
對上述容器劃分模型在Intel Core i5/31 GHz的PC上進行試驗驗證,運行環境為Windows7旗艦版操作系統。實驗使用的服務器端為openfire393,使用的客戶端為基于Smack開發包開發的模擬用戶端。數據源為抓包軟件采集的智能空調設備與手機App之間的監測、控制數據流。
通過表4對比可見,采用了本文所述的壓縮方案后,網絡中傳輸的一個完整通信過程所需的數據流大小與原始數據流相比有了明顯減小。
模擬用戶對智能設備進行控制并接收設備上報的監測信息,設備每10 s上報一次實時數據,用戶每分鐘對設備發送一條控制指令。通過“科來”網絡流量監測軟件對一個時段內流經協議端口5222的數據流量在不經過壓縮處理、經過基本LZW編碼壓縮處理和經過本文壓縮模型處理后的統計如圖3所示。
可見經過本文設計的壓縮模型改進的服務器端,通信協議產生的網絡流量與原始服務器和啟用了默認LZW壓縮方案的服務器端相比有了一定的減少,且隨著時間的增加,流量節約更加明顯。
3結論
本文針對XMPP協議數據流量冗余的問題,提出了一種使用于XML數據流的基于改進的字典編碼的容器劃分模型算法,該算法可以在不破壞協議實時性的基礎上,對XMPP協議通信雙方的XML流進行結構索引字典編碼,分結構和內容分別進行壓縮,同時針對信息體中重復字符較多的特點對信息體采用BWT編碼預處理。實驗證明,基于改進的字典編碼的容器劃分模型可以有效減少XML數據流的冗余,達到節約網絡流量的目的。適用于需要長連接的智能家居檢測、控制系統中。
參考文獻
[1] 劉涌,張彥功,梁崑濤. 移動設備上 XMPP 功耗與帶寬的研究[J]. 小型微型計算機系統,2013,34(2):272-276.
[2] 鐘世明,邵銳,張勝,等. 基于位置服務系統中XML數據流壓縮方法[J]. 武漢理工大學學報,2006,30(1):29-32.
[3] 王騰蛟,高軍,楊冬青,等. 面向 XPath 執行的 XML 數據流壓縮方法[J]. 軟件學報,2005,16(5):870-877.
[4] 張曉琳,翟國峰,譚躍生,等. 基于動態哈夫曼編碼的XML數據流壓縮技術[J]. 內蒙古科技大學學報,2007,26(4):332-336.
[5] 李瑞. XMLPre:一種基于預處理的XML壓縮算法[D]. 西安:西安電子科技大學,2014.
[6] 周文瓊,王樂球,周桐,等. 基于XMPP 的企業即時通信系統研究與應用[J]. 吉林大學學報,2010,28(1):108-111.
[7] 許霞,馬光思,魚濤. LZW 無損壓縮算法的研究與改進[J]. 計算機技術與發展,2009,19(4):126-127.
[8] 王磊,孟昭鵬,劉亞瓊. 一種基于LFU置換的BWT壓縮算法的改進[J]. 微計算機應用,2008,29(3):80-83.
[9] 鄧宏貴,王晉秀,曹莉凌,等. 基于 BWT 改進的 LZW 算法在傳感器網絡中的應用[J].傳感技術學報,2008,21(6):1048-1051.