2017年第26卷第3期 http:Nwww.c-S—a.org.cn 计算机系统应用 基于MQTT协议的即时消息业务设计与实现① 林浒 ,张家铭l, ,杨海波 (中国科学院沈阳计算技术研究所,沈阳110168) (中国科学院大学,北京100049) 摘要:近年来,宽带接入技术正以十分惊人的速度发展.与此同时,移动互联网技术也曰益成熟,即时消息业 务己成为移动互联时代的应用热点.在互联网中XMPP和SIMPLE被广泛使用,但其并不能很好的适用于移动互 联网.采用发布/订阅模型的MQTT协议是一种轻量级的消息传输协议,具有低功耗、节省流量和可扩展性强的 优点.本文首先分析了XMPP和SIMPLE协议的不足之处,研究了MQTT协议的消息格式以及协议的使用方式, 之后对即时消息业务进行了设计和实现.并在功能和性能上进行了相关的测试和分析. 关键词:即时消息;发布/订阅;MQTT;移动互联网 Design and Implementation of Instant Messaging Business Based on the MQTT Protocol LIN Hu ,ZHANG Jia-Ming ,YANG Hai.Bo :(Shenyang Institute ofComputing Technology,ChineseAcademy ofSciences,Shenyang 110168,China) (Unive ̄ity of Chinese Academy of Sciences,Beijing 1 00049,China) Abstract:In recent years,broadband access is developing with astonishing speed.At the same time,the mobile Intemet technology is also increasingly mature,instant messaging business have become a hot point of the era of mobile Internet applications.XMPP and SIMPLE are widely used in the Interact,but they are not suited to the mobile Internet.The MQTT is a publish/subscribe model based and lightweight messaging protocol,which has the advantages of reducing power consumption,decreasing flow and has s ̄ong flexibility.Firstly,this article analyzes the shortcomings of XMPP and SIMPLE protoco1.Secondly,it introduces he tmessage format and the usage of the MQTT protoco1.After the design nd iamplementation of the instant messaging business,the related testing and analysis are carried on the function and performance. Key words:instant messaging;Pub/Sub;MQTT;mobile Internet 随着移动互联网和移动智能终端的普及,移动智 能终端已经成为网民接入互联网的重要途径,即时通 信迎来了前所未有的发展契机.与此同时,由于用户 通常会随身携带手机,移动消息应用在手机客户端上 的重要性也逐渐凸显,移动消息中的即时消息业务成 高的要求.然而上述两种协议均不能较好的满足移动 消息的应用场景.本文通过对解决当前即时消息业务 的相关协议进行研究和分析,提出了更适合移动互联 网的基于MQTT协议的即时消息业务解决方案. 本文主要分为四部分,第一部分对SIMPLE和 XMPP协议进行了相关的研究,并分析了在移动互联 网下两协议的不足之处.第二部分提出了基于发布/订 为一个炙手可热的研究领域.目前,即时消息除了通 过采用私有协议(如QQ、微信等)实现外,还主要通过 SIMPLE和XMPP两大类协议.然而,由于移动智能终 阅的轻量级的MQTT协议,对其进行了简单地分析, 并阐述了它的消息格式.第三部分对即时消息业务的 端对流量有限制,对网络的带宽以及终端的功耗等有 特殊的要求,因此即时消息业务对即时通信协议有更 ①基金项目:教育部-中国移动科研基金(2015)(MCM20150103) 话题、payload以及消息路由进行了设计和实现.第四 收稿时间:2016.06—30;收到修改稿时间:2016—08—18【doi:10.15888/j.cnki-csa.005678] Research and Development研究开发219 计算机系统应用 http://www.C—S—a.org.cn 2017年第26卷第3期 部分.对本文设计的即时消息系统进行了相关的测试 和分析. XMPP和SIMPLE协议是基于消息体寻址的协议, 消息体中包含了消息的发送者、消息的接收者以及消 息路由用的会话标示等头域,这使得消息体过大,极 大的降低了带宽的利用率. 1相关协议分析 1.1 SIMPLE协议 SIMPLE(SIP for Instant Messaging and Presence 2基于发布/订阅的MQTT协议 2.1发布/订阅模型概述 Leveraging Extensions)协议簇是由IETF SIMPLE工作 组制定的,主要是扩展SIP协议,以使其支持IM服务_3J SIMPLE工作组为SIMPLE协议的规范制定做了大量 发布/订阅模型是一种消息传播模式,消息的发布 者不直接将消息发送到消息的订阅者,而是根据某种 的工作,并且发布了一系列RFC文档.SIMPLE提出 session模式和page模式[引.session模式中,即时消息被 作为一种类似于音视频的媒体,通过SIP信令进行交 互,即时消息协商后建立一个会话,通过建立的会话 进行消息媒体的交互.page模式中,通过sip请求包裹 即时消息的内容发送消息的方式.通过对SIP协议的 扩展 SIMPLE协议有了很大的改进.在完成了SIP信 令协商之后,一般的多媒体会话需要使用一些其他协 议来建立用户代理之间的会话通道以此完成会话数据 的交互.基于SIMPLE协议的即时消息交互不需要建 立会话通道,消息通过SIMPLE协议的消息命令直接 发送,每个消息都由一个单独的消息命令来传播,彼 此独立. 1.2XMPP协议 XMPP由IETF于2004年完成了标准化工作,符 合I C2778和RFC2779规范.XMPP源于Jabber 协议,它是以XML为基础开放式的即时通信协议}4】. XMPP协议继承了XML的灵活性、扩展性,它以 TCP/IP传输为基础,定义了客户端、服务器和网关三 种角色.服务器不仅要承担客户端信息记录,还要负 责连接管理和信息的路由功能.网关负责各异构即时 通迅系统之间的通信. 1.3 XMPP、SIMPLE协议在移动互联网中的不足 XMPP和SIMPLE协议均是基于字符文本进行传 输的通信协议,字符文本协议通信的效率较低,为了 确保通信的安全,二者采用了TLS等加密传输机制计 算量较大,功耗较高. XMPP和SIMPLE协议是基于相对可靠的网络上 的应用层协议,在底层网络不稳定的情况下,容忍机 制不够健全,应用在移动互联网即时通信时,网络的 不稳定现象经常出现,恢复网络连接需要较多交互数 据包,浪费用户流量,降低了用户体验. 220研究开发Research and Development 特征将发布的消息进行分类,在这个过程中消息的发 布者不需要关注消息的订阅者.同样,消息的订阅者 通过订阅某个感兴趣的消息,不需要关注消息的发布 者.在这种机制下,消息的若干个发布者与若干个订 阅者之间不需要直接进行通信,而是通过建立消息代 理作为中介互相通信.通过这种发布者与订阅者之问 的解耦合关系,这种模式提供了更好的网络扩展性和 更动态的网络拓扑. 发布/订阅模型中,消息的订阅者往往只接受消息 发布者所发布消息的某个子集.消息的过滤指的是对 接受和处理的消息进行选择的过程.通常有两种过滤 形式:分别是基于主题和基于内容的过滤,MQTT协 议采用基于主题的发布/订阅模式. 在基于主题(Topic)的发布/订阅模型中,消息以 特定的主题名标识被发布者发布至消息代理服务器上 基于主题的发布/订阅模式中,订阅同一主题的订阅 者将会收到相同的消息,消息的订阅者可以订阅多个 主题.发布者负责定义订阅者可以订阅的消息类别. 消息代理负责维护消息队列,执行消息的存储转发功 能. 2.2 MQTT协议简介 MQTT(Message Queuing Telemetry Transpo ̄,消 息队列遥测传输)是由IBM公司开发的即时通讯协议, 它是一个基于发布/订阅模型、轻量级的消息传输协议【 1 具有开放、易用、精简等特点.MQTT协议是为那些计 算能力有限,且需要工作在低带宽、不可靠的网络通 讯而设计的协议【 . MQTT主要有有以下几个特性: ①使用基于主题的发布/订阅消息模式,提供一 对多的消息发布,屏蔽了应用程序之间的耦合性: ②MQTT协议有三种级别的消息发布服务质量【 】 “至多一次”,发生的消息会丢失或重复,这一级别可 2017年第26卷第3期 http:llwww.c-S—a.org.cn 计算机系统应用 用于一些传感器传输数据,消息丢失一次对系统不会 有严重影响,因为在不久之后系统还会进行消息的第 在相关的保留信息时,则不发送. Remaining Length是剩余长度,包含Variable header、payload的长度,默认Remaining Length为1 字节,最多支持扩展4字节,因此一条MQTT可携带 的消息最高是256MB. 二次发送;“至少一次”,该情况下能确保传输消息的准 确到达,但有可能会产生消息重复的传输的现象;“只 有一次”。确保消息只到达一次.这一级别可用于一些 计费系统,使用该级别表明进行传输的消息内容特别 重要: 3 即时消息业务的设计与实现 即时通信在实际的应用场景中,客户端与服务器 的具体交互流程如图1所示. ③MQTT协议采用二进制的形式表达。固定长度 的头部只有2字节,协议交换达到最小化,极大的降 低了网络带宽的开销. 2-3 MQTT协议的消息格式 MQTT消息体由固定报头、可变报头以及有效载 荷三部分组成[6】,固定报头是每个消息体都必须要包 含的部分 固定报头部分的长度为2字节.消息格式 如表1所示. 表1 MQTT协议的消息格式 固定报头 可变头域 有效负载 Fixed Header Variable Header Payload 必有 喃 些消息百 以没有 消息体的固定报头有2个字节长,具体的格式如 表2所示. 表2固定头域 bit l l 5 I 3 2 f 1 O MQTr Control Packet DUP Byte1 QOS Flag Retain Flag Type Flag Byte 2 Remaining Length 固定报头的高四位是消息的类型,最多可以支持 l6种的消息类型.目前,MQTT协议已经定义了14种 消息类型[ . Dup Flag用于标识是否第一次发送该消息.当 Dup Flag为0时表示第一次发送该消息.虽然Dup Flag为1表示该消息是重传消息,但是不能保证用户 之前收到过该消息. QOS表明发布消息的交付质量等级,可选值为 0、 1、2. Retain标识仅在发布消息中使用.对于消息的发 布者,当客户端发送消息时,如果该标识设置为1,则 消息发送到订阅该主题的所有订阅者之后,代理服务 器仍然保存该消息.对于消息的订阅者,当一个主题 有了新的订阅用户,最后被保留的消息主题将被设置 保留字段,然后发送到新的消息订阅者.当主题不存 客户端A 图1 IM交互流程简图 客户端A、B会分别订阅/IM/A和/IM/B主题.客 户端A和B会向对方的主题上发布消息,之后会通过 代理服务器进行转发【8].MQTT协议中消息不携带路 由信息和消息的内容类型.因此,我们需要对payload 中携带的消息格式根据业务的需求进行明确的规范, 使客户端能够从payload中获取消息的类别、发送者的 信息以及载荷域的内容格式等相关信息.由此可见, 使用MQTT协议实现即时通信的应用关键点在于话题 的设计,消息的发布、订阅流程以及消息路由.下面将 对即时消息的上述问题进行设计和实现. 3.1话题格式设计 话题格式为:/namespace/im/u/uid. 在MQTT协议中话题至少需要一个字符的长度, 话题对大小写敏感的.通过“/”用来区分相应的话题层 级.规定,以“/”开头的话题为普通话题, 以”¥”开头 的话题为系统话题【9】.namespace为用户所在的组织名 称,可以为企业或学校的标识名.中间部分用来表示 话题类别,im表示即时消息话题.最后的uid代表用户 的唯一标示符. 3.2 Payload设计 对于一条即时消息,消息的接收方在接收到消息 之后,需要知道该消息的发送时间、消息的类型、消 Research and Development研究开发22 1 计算机系统应用 http://www.c—S—a.org.cn 2017年第26卷第3期 息内容的类型、消息内容以及该消息的发送者等信息 因此该消息的payload的设计如表3所示. 表3即时消息的payload设计 在上述定义中, ty:是媒体的类型,目前需要考虑支持的媒体类 型包括:文本,图片,音频,视频,文档,文件,地图 位置,html代码,以及其他富媒体,如通知、公告、轻 应用数据等. Sender:发送者消息,变长,可为空. TS:发送时的时间戳,4个字节,不可为空. 在Type中包括发送消息的类型(高4位)以及消息 内容的类型(低4位).消息的类型,现阶段只用三种表 CO;是媒体的内容. fh:如果媒体涉及到文件或者文档名字,这里给 出的是文件. 3.3预订阅设计和实现 示,具体是0表示是点对点的即时消息,1表示PC端 到手机端的即时消息,2表示的是手机到PC端的即时 消息,其余13种保留用于今后扩展:消息内容的类型, 可表示16种媒体类型,具体的示例定义如下:0表示普 通文本信息,1表示图片消息,2表示音频文件,3表示 视频文件,4表示PDF文档,5表示Word文档等.这里 需要注意的是,在Payload中一次只携带一种媒体文 件.采用离线文件传输的方式,不在payload中进行文 件传输,文件上传结束后将对应的下载链接地址在 payload进行传输.Type的详细设计如表4 表4 Type详细设计 Type Media Count Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bitl BitO Con—len:4个字节,表示后面携带的媒体内容的 长度. Content:是将消息内容按照json格式组织的字符 串.该字符串默认情况下按照json数组的形式来组织 的,这样就允许在消息中支持多种媒体并存,可以构 建较为复杂的应用时满足对应的需求.对于每种媒体, 按照媒体类型不同,提供不同的描述字段.具体实现 如下: ”con”:[ {ltty”:0,//0:文本,1:图片,2:音频,3:视频,4:文档 文件,5:文件,6:地图,14:富媒体 ” COlf_”url或者文本”,//媒体的内容 Optional ”fn”:{ “name’’:“text.txt”. “size’’:“500’’ } }//可以并列多个消息内容 ] 222研究开发Research and Development IM是通过话题来组织的,而话题的订阅一般由客 户端完成.当所需订阅的话题过多时,由于客户端订 阅数据量庞大,必定给网络带来巨大压力.其次,对 于移动设备而言,因数据流量有限,势必将造成不必 要的浪费.因此,为了减轻移动客户端压力,提高用 户体验,本文采用预订阅设计方案,即在服务器端构 造一个预订阅的客户端.流程如图2所示. M0TT服务器 预订阅客户端 5、船析消息, 获得预订阅话题 I I 图2预订阅序列图 预订阅模块帮助用户完成订阅话题工作的具体流 程: 1)当服务器检测到客户端是首次连接时,就会将 uid及其他相关信息推送到服务器中的某一话题. 2)预订阅模块接收到服务器发送的消息后,解析 此消息,获得新连接用户的uid及该用户的预订阅话 题列表.根据订阅列表,预订阅模块向代理服务器进 行订阅请求. 3)通过代理服务器的接口实现预订阅模块中话 题的预订阅和取消预订阅.完成订阅后,代理服务器 向预订阅模块返回确认消息. 2017年第26卷笫3期 http:llwww.C-S—a.org.cn 汁算机系统虑刖 3.4消息路由设计实现 本文要求实现多终端IM消息同步.对于接收方 4即时消息业务的测试 4.1功能测试 表5测试环境参数 CPU/ti频/核数Dell R320 作 li12.5GHz/8核 而言,由于同时订阅了自己的IM topic,所以收到消息 后可以实现各终端问的同步.但对于发送方而言,由 于在消息发送时 终端没何联系,导致发送方的各终 端问无法同步【IⅢ.为此,本文提出了一套通过在代理 服务器上增加消息路由机制,实现的基于消息路由规 则的多终端消息同步方法. 发送到一个话题上的消息需要根据消息路由规则, 判断足否同时复制到其他话题上.该规则采用话题的 模糊匹配,对于匹配成功的消息,将其转发至特定话 题上.其中一条消息路由规则的基本组成部分为三部 L phoneSs MQTTr ̄-,m - ̄aAndroid 系统 网 CentOS 64(X64) 100Mbps 本文考虑到 台问兼容性问题,在该功能测试部 分采用了以卜环境:1台Android手机,l台iphone5s手 机,1台MQTT服务器(图4所示),20Mbps网络带宽. 分,源地:flL(src Topic)、消息路由动作(action)、目的地 址(dest Topic).消息路由的详细过程如图3所示. —--——---C・1rill[ ̄I_t—C()、At:K一Dim ●———(nnno0t——一一 ■——一 cK———— 一Puh( I——-  ̄--.,---PublIck'mr ——_} uh l I——.- r _———一I’uh 1ck一: ,. ̄..---Puh‘ 1s:I一 : —一一Pub qo =I一 l IJI1H‘-k—————+ I’I】b^ k————— : 一图4消息时序图 IOS用户和Android用户之问通过MQTT服务器, 分别发送文字、语音、图片、视频等不同类型的媒体 图3消息路由示例 具体过程说明如下: 消息,消息发送流程如图4所示,呈现效果如图5所 示. ①Alice的PC端向Jim的IM topic上发送一条消 息 ②Broker收到消息后,经过路有规则查询,判定 该消息是否有匹配的路由规则,如果存在则继续进行, 否则忽略③和⑤ ③根据规则中的消息路由动作进行消息路由, 2 静 翟圈 找到路由转发的日的topic,图中为Alice的IM topic. ④把IM消息Pub给Jim ⑤Alice PC端发送的消息在其他终端得到接收, 并呈现 图 + ⑥消息分发到Jim的所有终端 图5 IM效果图 测试结果表明,各种类型媒体消息发送均能即时 Research and Development研究开发223 计算机系统应用 http://www.c—S-a.org.cn 2017年第26卷第3期 显不. 5结语 即时消息业务已经发展成为人们日常沟通的重要 4.2 IM流量测试 为了测试MQTT在移动互联网中的性能优势,笔 者在测试过程中分别对SIMPLE、XMPP、MQTT三种 协议进行了封装,并使用wireshark进行了抓包,对同 网络环境下三种协议所消耗的网络流量进行了对比, 方式之一。现有的即时通信协议不能很好地满足移动 互联网环境下的网络不稳定、流量花费高以及移动设 备的低功耗等特点.采用基于发布/订阅模型的轻量级 消息传输的MQTT协议,具有低功耗和移动互联网带 结果如图6所示. 漉量时 £ ∞ ∞ {∞ m ,∞ {∞ ∞ -●一 m 0 -瞬 m辞# 图6三种协议消耗流量对比图 从上图可以看出,随着发送消息文本数据包f横 坐标)的增加,三种协议消耗的流量(纵坐标)均在不停 地增加.其中,MQTT协议的增幅最小,XMPP协议次 之,但增幅也不大,SIMPLE协议增幅最大.由以上试 验数据可以看出,在流量消耗这方面MQTT协议的性 能最好. 4.3服务器性能测试 最后,对服务器负载能力进行测试.在客户端模 拟大规模用户对服务器发起连接请求,分别模拟 10000到100000个连接请求,所有请求的连接建立完 成后,分别进行不同数目的消息推送,测试所用的时 间以及服务器CPU的占用率,测试结果如表6所示. 表6服务器负载性能测试 连接数 CPU占用率(%)1到100推送1到1000推送全部推送 l0oOO 14.5 0.09l 0.114 l3.213 20000 25.0 0.105 0.225 27.167 3ooO0 33.2 0.287 0.434 42.254 40000 40.1 0.397 0.667 68.887 50000 45.1 0.487 0.976 IlO.997 75000 55.3 0.639 1.213 207.876 100000 62.4 0.855 1.433 3 13.876 由表中数据可以看出,本文设计的即时消息业务 基本满足了在移动互联领域上的需求,且服务器的负 载也在可以接受的范围内. 224研究开发Research and Development 宽利用率高的特点.本文在分析了相关私有协议的基 础上阐释了MQTT协议在移动互联网即时消息业务中 的优势,研究分析了MQTT协议的消息格式,并对即 时消息的话题格式、预订阅以及消息路由进行了设计 和实现.最后对实现的即时消息业务进行了相关的测 试和分析. 参考文献 1 Banks A,Gupta R.OASIS Standard MQTT Version 3.1.1. http://docs.oasis—open.org/mqtt/mqtVv3.1.1/mqtt-v3.1.1.htm1. 【2014—10—29]. 2 Tang K,Wang Liu H,et a1.Design and implementation of push notiifcation system based on the MQTT protoco1.Proc. International Conference on Informationence&Computer Applications.2013.92.1 16_.119. 3 Day M,Rosenberg J,Sugano H.A model for presence and instnat messaging.IETF,2000.2:RFC2778. 4 Extensible Messaging and Presence Protocol http://xmpp.org/. 5 IBM.MQTT Telemetry Transport.http://msqq.org.【2013—06—05]. 6 IBM,Eurotech.MQTT3.1Protocol Speciifcation.http//public. dhe.ibm.com/software/dw/webservices/ws—mqtt/mqtt—v3r1.ht m1.【20 1 0—08—241. 7 Lee S,Kim H,Hong D,Ju H.Correlation analysis of MQTT loss and delay according to Qos leve1. Information Networking(ICOrN).Bangkok.2013. 8马跃珊翱,贾军营 建伟,于碧辉,杨雪华.MQTT协议在移 动互联网即时通信中的应用.计算机系统应用,2016,25(3): 170—176. 9杨海波,王默涵,贾正锋,b立平.面向移动互联网的 Presence/IM机制研究小型微型计算机系统,2015,36(1 1). 2549-2553. 1O任亨.基于MQTT协议的消息推送服务器.计算机系统应 用,2014,23(3):77-82.