《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于XMPP协议的XML数据流压缩模型研究
基于XMPP协议的XML数据流压缩模型研究
2016年微型机与应用第1期
齐铖1,2,吴静1,2
(1.西南科技大学 信息工程学院,四川 绵阳 621010; 2.特殊环境机器人技术四川省重点实验室,四川 绵阳 621010)
摘要: XMPP协议作为基于XML数据流的即时通信协议,可用于构建统一、高效的智能家居监控消息推送方案。针对XMPP协议存在的流量冗余较大的不足,提出了一种基于容器模型和BWT变换思想的XMPP数据流压缩模型。该模型通过对XML数据流的容器划分、前缀编码和预处理,在单次扫描数据流的基础上达到压缩率的最大化。实验证明,该模型方案能有效节约XMPP协议通信过程产生的网络流量,并具有可行性。
Abstract:
Key words :

  摘要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所示。 

001.jpg

  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@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标签标志一段数据流的开始。<message>、<present>、<iq>元素称为XML节,每个节点下对应<to>、<from>、<body>等属性标签,设置了一个消息片段的发送方、接收方以及消息实体等信息[6]。协议传输的XML数据流的元素/属性节点类型是固定的,因此可以在通信双方内存中构建静态字典,字典的键为自定义的索引标号,值为协议对应的XML元素/属性节点内容。在数据部分,数据以原始形态被分配到字符容器中。利用相应的压缩算法对每个容器进行处理。容器划分模型的流程图如图2所示。

002.jpg

  1.2.2结构索引字典编码

  一般常用的字典编码压缩方法,为了算法的实时性,往往选择动态构建字典的形式,这在处理大型的内容未知的静态XML文档时是一种较好的处理方式[7]。但常规字典编码方案在动态构建字典时会消耗较多时间。对于XMPP协议支持的通信双方实时传输的数据流,基于协议结构节点固定这一特性,考虑采用事先设定好的静态字典形式,并在编码字典索引中加入前缀索引以便接受方快速定位每一个XML节中的信息体。通过上一节抓取的实际XMPP数据流阐述改进的字典编码步骤。该数据流展示了XMPP客户端test1向test2发送一段消息指令,内容为:“uid=1&devid=2&ordercode=3&ordervalue=26”。数据流经过SAX解析器后,由SAX的事件触发机制,将数据流按触发事件的不同分别引入元素、属性和内容三个容器中。

  根据上一节所述,设定一个静态的结构字典,如表1所示,结构字典中包含有标准XMPP协议中定义的全部XML节。

003.jpg

  根据表1所示的静态结构字典,可以方便地将数据流中的“结构信息”进行字典顺序编码并得到如下结果:0a 1a 1d ff 0b 1a 1b 1c 0b 1a 1b 1c 0c 1a 1b 1c 1d 0d ff 0e ff ff;通过对以上结果的分析可以发现,因为协议数据流中元素的嵌套结构较多,而“属性”结构通过简单的字典编码并不能确定其具体属于哪一个元素。因此,本文考虑在对数据流的结构信息进行基础的字典编码时,动态加入与其所属的元素对应的前缀索引信息,如表2。

004.jpg

  包含前缀索引的字典编码按容器划分方法依次填入相关容器,以message节点为例,最终容器划分结果以及各容器中的数据如表3所示。

005.jpg

  1.3BWT变换思想

  BWT变换也称作块排序,是一种针对一个数据块的排序压缩方法,其目的是将数据块中出现频率较高、重复出现的数据段尽量整合到一起。其核心思想是对目标数据块中的内容进行矩阵变换。BWT变换本身并不会减小数据块的大小,只是改变了排序顺序[8]。根据信息论中关于信源信息熵的定义,将一个随机变量的熵表示为:

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

  其中P(xi)为信源取第i个符号的概率。

  根据数据压缩的原理,假设一个包含n个字符的字符串,每个字符的出现概率为p1,p2…pn,那么经过任何压缩算法后的二进制占位至少为:

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

  式(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%和7125%,有明显提升。XMPP协议传输的数据流具有较多的重复字符,适合将BWT变换引入其中作为常规数据压缩前的预处理。在接收实体接收到经过BWT变换的内容后,根据前序查找的方法,以原字符串末尾为起始,可以还原字符串。

2算法的测试和应用

  对上述容器划分模型在Intel Core i5/31 GHz的PC上进行试验验证,运行环境为Windows7旗舰版操作系统。实验使用的服务器端为openfire393,使用的客户端为基于Smack开发包开发的模拟用户端。数据源为抓包软件采集的智能空调设备与手机App之间的监测、控制数据流。

006.jpg

  通过表4对比可见,采用了本文所述的压缩方案后,网络中传输的一个完整通信过程所需的数据流大小与原始数据流相比有了明显减小。

  模拟用户对智能设备进行控制并接收设备上报的监测信息,设备每10 s上报一次实时数据,用户每分钟对设备发送一条控制指令。通过“科来”网络流量监测软件对一个时段内流经协议端口5222的数据流量在不经过压缩处理、经过基本LZW编码压缩处理和经过本文压缩模型处理后的统计如图3所示。  

007.jpg

  可见经过本文设计的压缩模型改进的服务器端,通信协议产生的网络流量与原始服务器和启用了默认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.


此内容为AET网站原创,未经授权禁止转载。