- 1 -
xmpp 协议在企业信息系统中的扩展研究
位永康*
(北京邮电大学嵌入式系统与网络通信实验室,北京 100876)
5 摘要:本文研究分析了 XMPP 协议,以及基于该协议的企业级即时通信系统。在此基础上,
对 XMPP 协议进行了自定义扩展,将当前企业信息系统中的远程控制以及实时推送功能和
即时通信系统进行融合,通过扩展 XMPP 协议,精简整个企业信息系统,提高系统的可维护
性和效率。
关键词:计算机网络;XMPP;协议扩展;实时推送;远程控制 10
中图分类号:TP393
Research of the extend of the XMPP protocol for enterprise
information system
WEI Yongkang 15
(The embedded system and network communication laboratory,Beijing University of Posts and
Telecommunications,Beijing 100876)
Abstract: This paper studys and analyses the XMPP protocol, and the enterprise real-time
communication system of the enterprise based on the XMPP. Based on this,extend the XMPP
protocol and combine the function of remote device control and the push of official business 20
information in the enterprise information system with the real-time communication system,
simplify the entire enterprise information system, improve the system's maintainability and
efficiency.
Key words: Computer Networks; XMPP; Protocol extension; Real-time push; Remote control; 25
0 引言
随着互联网的迅速发展,企业信息化进程进一步加快的过程中,各种传统行业开始建设
自己的信息系统,通过互联网来完成之前人工进行的工作,这些工作包含办公和生产等多个
方面。在快速发展的同时,这些企业的信息系统建设中也渐渐凸显出现一些问题,主要有以30
下两点:1、由于经验或技术水平的问题,不少中小企业的信息系统复杂混乱,办公、业务、
生产等功能模块互相独立设计实现,架构复杂,维护和升级成本过大。2、即时通信软件扮
演角色越来越重要,相较于电子邮件、短信以及各种方式的会议,在信息交流方面 IM 更加
快捷方便,越来越多的企业部署了即时通讯系统,旨在提高工作效率,降低沟通成本[1]。综
合上述两个特点,可以尝试将现有的 IM 和企业的部分办公生产功能进行结合,在满足需求35
的同时精简企业复杂的信息系统,降低维护升级成本,提高员工交流和工作效率。在当前
IM 所使用的协议中,XMPP 协议作为当今应用较广的一种,具有出众的开放、灵活、易扩
展等特性,相较于其余的协议,如 SIMPLE,XMPP 是最灵活的。它具有 XML 带来的与生
俱来的扩展性,任何人都可以用扩展的 XML 信息来处理客户的特殊要求并在 XMPP 基础上
构建新的应用[2]。本文也将基于 XMPP 协议,针对远程设备控制、实时推送两项功能,对协40
议进行扩展,完成即时通讯系统和企业办公、生产业务的整合。
- 2 -
1 基于 XMPP 的即时通讯系统
XMPP 协议概述
可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的
XML 数据元流式传输。XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式45
协议。XMPP 是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现
场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上
的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP 中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间
双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与50
异构即时通信系统的互联互通,异构系统可以包括短信,MSN等。基本的网络形式是单客
户端通过TCP/IP连接到单服务器,然后在之上传输 XML。
XMPP 广泛应用于基于 C/S(Client/Server)结构的系统,采用 TCP 协议进行网络通信,
所有从一个客户端发给另一个客户端的消息和数据都必须通过服务端,工作原理如图 1[3]所
示: 55
XMPP
客户端
XMPP
客户端
XMPP
客户端
XMPP
客户端
域名服务器
协议网关
XMPP服务器 XMPP服务器
其他服务器
图 1 XMPP 工作原理
Fig. 1 The working principle diagram of XMPP
可以看出该协议具有以下特点: 60
(1)XMPP 系统是一个分布式系统,每台服务器控制自己的资源,但是如果需要,它
- 3 -
中国科技论文在线
能与外在的系统进行通信,既便于企业内部统一管理信息,又能方便的对外沟通。
(2)采用 XML 格式承载信息,可扩展性极强,便于企业定制业务。
(3)底层采用 TCP 长连接实现,实时性有保证。
(4)XMPP 协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组65
件、源码库等方面,都已经各自有多种实现,在稳定性和安全性方面值得信赖。
(5)基本功能完善,满足一款即时通讯软件的功能需求。
可以看出XMPP协议对于企业级 IM尤其是传统行业中的中小型企业来说是十分适用的
[4],能很好的满足企业的需求,并且开发维护成本较低。
XMPP 基本消息格式 70
XMPP 的通信消息采用 XML 格式进行承载,在两个实体的连接期间,XML 流将从一
个实体传送到另一个实体。在实体间,有三个顶层的 XML 元素:<message/>,<presence/>和
<iq/>。每一个都包含属性和子节点。下面将分别描述这些元素。
(1)消息元素:
一个即时消息系统最基本的功能就是能够在两个用户之间实时交换消息,<message/>元75
素就提供了这个功能。每条消息都有一个或多个属性和子元素。属性“from”和“to”分别
表示了消息发送者和接收者的地址。<message/>也可以包含一个“type”属性,这给接收者
一个提示,这个消息是什么样的消息。<message/>中也可以包含“id”属性,用来唯一的标
识一个输出消息的响应。
(2)状态元素: 80
<presence/>元素用来传递一个用户的存在状态的感知信息。用户可以是“available”、
“unavailable”、“hide”等。当用户连接到即时消息服务器后,好友发给他的消息就立即
被传递。如果用户没有连接到服务器,好友发给他的消息将被服务器存储起来直到用户连接
到服务器。用户通过即时消息客户端自己控制可用性。<presence/>还包含了两个子元素:
<show/>和<status/>。<status>包含了一个对<show/>的文本描述。 85
(3)IQ 元素
IQ 元素是 XMPP 消息协议的第三个顶层元素。IQ 代表"Info/Query",用来发送和获取
实体之间的信息。IQ 消息是通过“请求/响应”机制在实体间进行交换的。IQ 元素用于不同
的目的,信令之间通过不同的命名空间来加以区分。在 Jabber/XMPP 消息协议里有许多的
命名空间,但最常用的命名空间是:"jabber:iq:register","jabber:iq:auth","jabber:iq:roster"。 90
上面描述了 XMPP 协议的三个顶层节点。可以看出 XMPP 消息不仅携带简单的文本,
而且可以携带复杂的数据和各种格式的文件,也就是说 XMPP 不仅可以用在人与人之间的
交流,而且可以实现软件与软件或软件与人之间的交流。XMPP 的这种功能大大扩展了即时
通信的应用范围。
XMPP 协议消息示例: 95
<stream
from=”xx@”
to=”yy@”
version=””
xml:lang=”en” 100
xmlns=”
<message xmlns=”jabber:client”>
- 4 -
中国科技论文在线
<body>foo</body>
</message>
</stream> 105
XMPP 扩展
目前除了核心协议外,XMPP 还具有大量的扩展协议来实现一些附加功能,如实现离线
消息的 XEP-0013、XEP-0160 和 XEP-0203,实现文件传输的 XEP-0095、XEP-0096 和
XEP-0065 等扩展协议,这些都为 XMPP 提供了强大的功能支持,而且由于其强大的可扩展
性,很多目前未实现附加功能都可以通过对于 XMPP 协议进行自定义扩展来实现[5]。于是通110
过扩展协议中的信令完成远程设备控制以及实时信息推送功能是完全可行的,大致结构如下
图所示:
推送服务器/发布人员 XMPP服务器推送信息 设备控制服务器
协议扩展
组件
广域Internet
智能移动终端智能移动终端
SMS网关SMS网关
XM
PP信
令
XMPP信令
XM
PP
信
令
传统移动终端传统移动终端
SM
S
PC平台PC平台
XMPP信令
生产中心生产中心
X
M
P
P信
令
控制信息
控制
信息
图 2 总体架构图 115
Fig. 2 The general architecture diagram
2 远程设备控制
目前一些能源、制造产业会有自己的生产服务器进行生产设备的启停和参数控制,随着
物联网的发展越来越多普通企业的一些生产工作设备也将可以进行联网远程控制,那么可以
利用 XMPP 服务器充当用户和企业原有的生产设备控制服务器间的中转,综合考虑在
中描述的 XMPP 信令中的三种元素,iq 元素在逻辑和实现上无疑是最适合的,用户通过 set
型 iq 元素完成设备的操作,通过 get 型 iq 元素完成设备状态的获取,同时因为服务器会对
每一个 iq 请求进行回复,那么就可以通过这个回复来承载设备信息以及控制操作成功与否。
该功能基本架构如下图所示:
- 5 -
中国科技论文在线
设备控制服务器XMPP服务器
控制操作
操作反馈
XMPP客户端
Iq控制节
Iq控制反馈节
125
图 3 设备控制总体架构
Fig. 3 Equipment control architecture
交互时序图如下所示:
生产服务器XMPP服务器客户端 生产设备
登录鉴权
登录成功
启停控制
启停控制
启停控制
控制结果
控制结果
控制结果
参数调节
参数调节
参数调节
调节结果
调节结果
调节结果
获取信息
获取信息
设备信息
设备信息
130
图 4 设备控制时序图
Fig. 4 Equipment control sequence chart
- 6 -
中国科技论文在线
那么可以以下方式扩展 iq 节:
首先扩展 iq 的 type 属性,使新的扩展信令独立于原有的 set 和 get 信令,设置自己的135
get 和 set 类型名,接下来需要扩展 iq 的 query 子元素中的命名空间属性,即 xmlns 属性,
通过命名空间来区分对于设备的控制类型,如启停、参数调节等等,如 。
信令的结构可以如下设计:
GET 类信令:
客户端发送: 140
<iq from=”xx@” type=”getdeviceinfo” id=”deviceinfo”>
<query xmlns=””>
<deviceid>控制目标设备的唯一标识</deviceid>
<getinfotype>需要获取的设备状态 如温度、压力等等或者所有信息</getinfotype >
……. 145
</iq>
服务器返回:
<iq type="result" id="deviceinfo" to=" xx@ ">
<query xmlns=" ">
<item name="目标设备的唯一标识" > 150
<getinfotype>信息标识</getinfotype>
<getinfovalue>设备信息的值</getinfovalue>
……
</item>
…….. 155
</query >
</iq >
GET 类信令:
客户端发送:
<iq from=”xx@” id= “deviceinfo” type=” setdeviceinfo”> 160
<query xmlns=''/>
<deviceid>控制目标设备的唯一标识</deviceid>
<devicecontrol>需要对目标设备进行的操作</ devicecontrol >
…….
</iq> 165
服务器返回:
<iq type="result" id="deviceinfo" to=" xx@ ">
<query xmlns=" ">
<item name=”目标设备的唯一标识”>
<setinfotype>信息标识</setinfotype> 170
<setinfostatus>设置成功与否</setinfostatus>
……
</item>
</query >
</iq > 175
- 7 -
中国科技论文在线
这种实现方式不影响原本 set 和 get 类型的 iq 信令的处理,独立性强并且 iq 元素的 type
属性以及 query 子元素的 xmlns 属性均可继续进行扩展,可以满足企业的不同需求。
3 实时信息推送
实时推送功能指的是推送企业办公和生产工作相关的的信息,如企业公告、设备实时数
据、工单等,这种推送服务对于企业员工来说极其重要,实时性良好的推送服务将企业的最180
新动态以及工作任务第一时间进行下发,提高员工工作效率。
XMPP 支持多人信息发送的功能,于是可以利用该功能实现员工的分组,再根据该分组
进行信息的多用户推送。XMPP 的<message/>节点是通讯过程中基本的“推”方式,它是一种
“发出不管”的机制,可以快速的进行消息的获取。消息通常用在 IM,群聊,提醒和通知,
及其他应用。那么综合以上的信息,对于 message 元素进行扩展来实现功能是合情合理的。185
XMPP 服务器收到现有生产信息系统的最新信息后生成一条特殊的 message 信令,发送给预
先设置好的 XMPP 服务器数据库中目标用户分组中的所有用户,系统架构如下图所示:
生产办公服务器XMPP服务器
推送信息
XMPP客户端
推送信息
message节
SMS网关 POP3网关
message节message节
短信 邮件
图 5 实时推送总体架构
Fig. 5 real-time push architecture 190
交互时序图如下所示:
- 8 -
中国科技论文在线
信息推送服务器XMPP服务器客户端
推送信息
推送信息
接收确认
接收确认解析信息
图 6 实时推送时序图
Fig. 6 real-time push sequence chart
message 元素的 type 属性确定了推送消息的具体种类,目前该字段有以下取值: 195
(1)normal,就像邮件消息一样,消息互相独立,可能有反馈,也可能没有。
(2)chat,用于双方实时回话的数据交换。
(3)groupchat,用于多用户聊天,即群聊,类似于 IRC。
(4)headline,用于发送提醒和通知,对是否有反馈没有要求。
(5)error,当双方前面发送的消息处理过程中有错误发生,该类型的节点就用反馈错误信200
息。
目前这些类型基本覆盖了普通用户间交互的信息类型,但是对于企业中的生产工作信息
多用户推送支持不够,需要在不影响现有的架构的基础上对协议进行扩展。首先需要添加新
的 type 以避免影响到现有协议,假设新的 type 命名为“pushinfomation”,接下来,在确定
了新的 type 之后,在 message 下的 body 元素就可以承载完全自定义的推送数据,subject 节205
点则可以承载推送信息的类型(工单、公告等),可以采用以下格式来组织数据:
<message from="manager @ to="user@" type=" pushinfomation ">
<body>
<pushstatus>本次推送操作的状态(正常/异常)</pushstatus>
<pushdata>推送数据实体</pushdata> 210
</body>
<subject>推送类型(工单、公告、设备信息等)</subject>
</message>
客户端需要在 message 信令的处理函数中进行相应的类型判断和对应的订制操作,由
于扩展的是 type 属性,服务器段对应的实现函数将与之前的 message 处理函数独立,互不215
影响,所以更加安全稳定。此外当 XMPP 服务器实现了与其他协议的网关对接时,推送信
息的通知方式将不仅限于 IM 客户端或者 web 端,甚至可以直接使用短信方式发送至员工手
机,企业可以按照需求进行不同通知方式的实现。
- 9 -
中国科技论文在线
4 结束语
XMPP 协议由于其开放性、易扩展性、标准性在各种 IM 中应用广泛。本文通过扩展220
XMPP 协议集成了当前企业信息系统中比较常见的生产设备控制以及生产信息实时推送两
种功能,分别对应生产和工作两方面的需求,可以达成精简企业原有的信息系统的目标,并
且由于 XMPP 协议无论是客户端还是服务器端在各种系统上均有相应的开源框架和软件支
持,如服务器端的 openfire 以及客户端的 spark 等等[6],易于移植到各种设备上,提高了企
业信息系统的可移植性,减少开发成本,提高工作效率,具有较高的应用价值。 225
[参考文献] (References)
[1] 王琦. 基于 XMPP 的 OA 即时通讯子系统的研究与实现[D]. 北京:北京邮电大学,2011.
[2] 张云川. 标准化的即时通信协议--SIMPLE 和 XMPP 的对比研究[J]. 武汉科技大学学报:自然科学版,
2005,28(4):375-377.
[3] 张彦,夏清国. Jabber/XMPP 技术的研究与应用[J]. 科学技术与工程,2007,7(6):1032-1035. 230
[4] 陈武. 基于 XMPP 的企业级即时通信系统的研究与实现[D]. 武汉:武汉理工大学,2009.
[5] 吴玉婷. 基于 XMPP 协议的即时消息系统的研究与实现[D]. 西安:西安电子科技大学,2009.
[6] 潘凤,王华军,苗放,李刚. 基于 xmpp 协议和 openfire 的及时通信系统的开发[J]. 计算机时代,2008,
(3):15-16.
235