APP下载

MQTT数据交换协议的分析与优化

2019-03-17李娜陈福朱建明黄勇峰张艳梅

网络空间安全 2019年9期

李娜 陈福 朱建明 黄勇峰 张艳梅

摘   要:为了提高消息代理服务器在设备数量、传输消息数量增长以及网络环境复杂程度增加的情况下的传输效率,文章选择Mosquitto作为MQTT的消息代理服务器,使用epoll机制代替poll机制,并对其订阅树的存储结构和遍历过程进行了优化。提出了将键树多重链表表示法中的分支结点思想应用于订阅树结构和使用了哈希表的方法来管理订阅主题和订阅者的思想。并提出了动态空闲空间管理机制。测试结果显示优化之后的Mosquitto在高并发、高负荷下具有更高的性能。

关键词:Mosquitto;MQTT通信协议;发布订阅模式;哈希表;epoll机制

中图分类号:TP393.0          文献标识码:A

Abstract: In order to improve the transmission efficiency of the message proxy server in the case of the number of devices, the number of transmitted messages, and the complexity of the network environment, This paper chose Mosquitto as the message proxy server of MQTT, using epoll mechanism instead of polling mechanism, and optimizing the storage structure and traversal process of its subscription tree. The idea of applying the branch node idea in the multi-linked list representation of the key tree to the subscription tree structure and using the hash table to manage the subscription topic and subscribers is proposed. And the dynamic free space management mechanism is proposed. The test results show that the optimized Mosquitto has higher performance under high concurrency and high load.

Key words: Mosquito; MQTT communication protocol; Publish and subscribe mode; Hash table; Epoll mechanism

1 引言

信息技术的发展不断改变着人们的日常生活。特别是5G网络的到来,物联网技术正在影响着人类衣食住行的各个方面。从简单的智能可穿戴设备到智慧物流、农业、工业、服务业等应用中,可以看出物联网技术有巨大的发展潜力和市场前景。无论从降本增效上,还是在提高人类生活质量上,物联网技术都占据着重要的作用[1~3][29]。

目前,物联网在市场中的占比不断增多,物联网硬件设备的需求量也连续增长。预计到2020年,全球物联网设备的连接量会达到500亿台[4~6]。其中,占比最多的为移动互联网与智能终端的连接。所以,在数据传输方面功耗和性能都比较低。MQTT协议恰是为低带宽、不稳定网络及计算和处置能力不足的设备所设计的,协议采用轻量型传输,耗费电量小,能最大程度降低网络流量开销,达到最小化消息包并高效分配与传输[7~9]。随着云计算和云存储等网络应用的发展,如今的数据中心中的服务器节点数量已有百万多个[10]。然而,目前的消息代理服务器并不能高效的管理数据流的传输,使得数据通信效率低下。所以,实现代理服务器的优化,提高数据通信效率显得尤为重要。

本文选择Mosquitto作为MQTT的消息代理服务器,使用epoll机制代替poll机制[11],并对其订阅树的存储结构和遍历过程进行了优化,提出了将键树多重链表表示法中的分支结点思想应用于订阅树结构和使用了哈希表的方法来管理订阅主题和订阅者的思想。同时,研究了Mosquitto[12]在用户断开连接时对空闲出来的空间进行管理的情况,以及新用户连接进来时的处理过程,分析了目前这种管理方法存在的缺陷,提出了运用指定长度动态数组的方法进行空闲空间的管理。从而满足复杂网络环境或设备量剧增时数据流可以高效的进行传输的需求。

2 相关工作

通过国内外对于MQTT的研究可以看出,这些研究主要集中在对MQTT的应用上,并且取得了一定的成果。但是对于传输消息的管理方面的研究却少之又少。对通信消息的管理以及优化可以节省通信时长,达到高效的消息传输。

在国外,由于物联网技术起步比较早,所以针对MQTT的研究也比较多。有在发布订阅机制方面的研究,也有在主题匹配算法领域的研究。其中,在主题匹配算法的研究上,Gough等人[13]提出了一种基于搜索树的匹配算法,但是当并行发送的请求增多时或者有请求取消时,这种算法不能很好的对搜索树进行修改。Aguilera等人[14]同样通过遍历发布订阅树获得匹配成功的订阅请求,但是却只将部分重复的谓词考虑在内。Silvia等人[15]将R-tree应用于基于内容的发布订阅匹配中,并将三种R-tree变形用于基于内容的数据传输中,在避免假阴性的同时也减少了假阳性的发生。Hu等人[16]研究了参数化空间文本订阅的位置感知发布订阅问题,提出了过滤器验证框架,有效的向相关订阅者传递了消息。Guo等人[17]开发了一个高效的位置感知发布/订阅系统Elaps,该系统使用R-tree进行内容匹配,当移动用户的位置附近出現匹配事件时,会迅速的通知给移动用户。

在国内,对于MQTT的研究也不断增多,2007年第一次出现对于MQTT的研究,当时国内也只有一篇文章提到了MQTT,作者李强在多个Zigbee监测网络远程监控的实现中通过MQTT协议实现管理应用、监测网络中网关节点与中间层消息代理间的数据传输[18]。目前,对于MQTT的研究达到了上百篇。较多的文献针对MQTT协议在消息推送领域的应用进行了探讨和研究,以探讨MQTT协议在教育、医疗、通信、农业等领域的应用[19~21]。具有代表性的文章来源于李宏等人[22],提出了基于MQTT的安卓手机防盗方法,测试表明该方法提高了安全性和可靠性。方霞[23]设计了基于MQTT的农业物联网消息推送系统,实现了对农业远程监控的功能。崔自赏[24]将MQTT通信协议用于电梯监控系统,用来实现终端与云服务器之间的数据传输,将终端获得的电梯实时状态信息与故障情况上传到远程服务器,可以达到对电梯进行实时监控的目的。

而且,国内对于MQTT通信协议代理服务器的研究也不断增多。 其中曾昂[25]等人提出了一款适合大文件传输的传输方式,该方式以消息为主体,每个订阅者共享一份拷贝,统一进行发送,降低了内存的占用空间。任亨以 Mosquitto、Redis等开源项目为基础设计并实现了一个基于 MQTT 协议的消息推送服务器, 能够对用户订阅的消息进行推送, 还实现了用户身份验证、ACL 权限检查、自动订阅话题、热点话题统计、服务器状态监控等功能[9]。

由此可见,随着MQTT协议的逐渐成熟,该协议在互联网通信行业扮演着越来越重要的角色。同时,对于代理服务器内部发布订阅匹配机制的研究在国外也在不断的完善,技术不断成熟,为本课题的研究提供了大量的文献基础。

3 MQTT数据交换协议的优化

3.1发布/订阅模式优化设计

发布/订阅模式是一种消息转发模式,在该模式中,消息的发布者和订阅者并不需要直接建立通信,只需要通过中间的消息代理服务器进行间接通信。中间的传输中介称为节点,也被成为主题(topic)。這种模式与TCP协议相比,解耦了用户之间的依赖性。

在Mosquitto中,将所有的topic和客户端的订阅关系存放在订阅树中。对于不同的topic,Mosquitto根据/进行分割,然后以树形结构的方式将这些片段相连,组成一棵订阅树。每个节点所对应的topic为从根节点到该节点所组成的节点数。对于订阅者来说,每个订阅者的客户端信息都挂在对应的topic下边。例如有如图1所示的订阅树结构。

如图1所示的订阅树,其中每个节点都是一个topic分级,每个节点对应的订阅topic由从根节点到当前节点所经过顺序路径节点组成。每个节点上连接的列表为订阅从根节点到该节点组成主题的订阅者列表。

在Mosquitto程序中,订阅树中存放的topic消息包括两大类,为系统topic和业务topic。一般将存储客户端订阅topic的树命名为业务子树,将保存客户端连接信息的子树命名为系统子树。系统 topic用于维护系统消息,业务topic用于维护客户端订阅的主题。Mosquitto程序代码中mqtt3_handle_publish()函数内存在一个字段retain,根据该字段的不同取值,这两种类型的topic在生存周期、创建时间和存储结果方面存在差异。

(1)Mosquitto中订阅树的创建

Mosquito程序在启动时就已经创建好三个节点,分别为总根节点、业务根节点和系统根节点,如图2所示。

其中,业务根节点和系统根节点为总根节点的子节点,在创建开始,业务根节点和系统根节点中的topic存储不同,业务根节点存的为空字符串,系统根节点中存的是字符串“$SYS”。订阅树的创建过程在mqtt3_db_open()函数中实现。

1)消息发布时搭建

在Mosquitto中,当订阅树搭建部分为系统子树或者是retain为1的消息发布时的业务子树,在消息发布时都可以进行搭建。以向系统topic:$SYS/broker/version发送版本消息“Mosquitto version 1.2”为例,搭建过程如下:

首先将发布的topic根据“/”进行拆分,存储到链表中。上述topic被拆分成$SYS、broker、version三个片段。

然后,找到对应的子根节点,根据总根节点的孩子节点中topic的存储情况,找到存放内容为$SYS的节点为系统子树根节点。

其次,对子根节点的topic进行遍历,遍历节点片段“$SYS”的下一个节点片段“broker”是否存在。如果不存在,需要产生一个新的节点;如果已经存在,继续遍历节点片段“broker”的下一个节点片段是否有“version”,无则添加,有则结束。添加节点在函数mqtt3_db_messages_queue()中调用函数_sub_add()实现。

最后,释放掉存放topic片段的链表。

消息发布时订阅树的搭建流程如图3所示。

2)消息订阅时树的搭建

当retain字段值为0时,业务子树在有订阅客户端订阅消息时才能创建。以订阅客户端向Mosquitto订阅了topic:country/city/district为例,具体实现过程如下:

首先将订阅的topic根据/进行拆分,并放入链表中。上述topic被拆分成country、city、district三个片段。

然后,找到对应的子根节点,根据总根节点的孩子节点中topic的存储情况,找到存放内容为非$SYS的节点为业务子树根节点。

其次,遍历业务子树中的topic是否与拆分的发布topic链表中的topic相同,如果不相同则为其添加该节点。具体过程在函数mqtt3_sub_add中实现。

最后,在所有订阅节点存在于订阅树中之后,查看该主题的订阅者是否存在,如果存在,将结点存入订阅树中,否则丢弃。释放掉存放订阅topic的链表。

3.2  Mosquitto中订阅树机制的分析与优化

(1)优化原因

Mosquito通过订阅树来管理主题和订阅者。其对主题的管理是用“/”将主题分隔开并存储到一棵订阅树中,从树的根节点到任意一个节点所经过的路径为一条主题订阅规则。每个节点都管理着该节点所对应的订阅列表,该列表中存储了订阅对应主题客户端的主要信息。所以订阅主题的数量和分级直接决定了树的形状,从而影响操作效率。在Mosquitto中对订阅树的主要操作为查找、插入和删除,这些操作都需要对订阅树的每一个层级进行遍历。

以插入为例,首先将订阅主题的每个分级与订阅树每层的节点进行对比,依次搜索相同的节点,如果找到,则进行下一级匹配,一直到所订阅的主题全部匹配完成,然后将订阅的内容挂到对应节点的订阅者列表中。如果存在一些分级无法匹配成功,说明订阅树中还不存在该主题,需要将该主题中不匹配的节点加入到订阅树中,然后将订阅内容挂到当前生成的节点的订阅者列表中。具体匹配流程如图4所示。

如果订阅主题当前的分级不为空,同时能够匹配上订阅树中节点中的内容,则进行下一个分级内容的比较。如果订阅主题当前的分级不为空,但是不能匹配上订阅树中节点中的内容,需要为订阅树当前分级插入一个节点,继续以插入节点为根节点进行下一层级的匹配。如果订阅主题列表为空,将订阅主题的内容挂到订阅列表中。

Mosquito采用的这种订阅树的发布/订阅模式可以提供清晰的逻辑,有利于开发和维护。但是每一个客户端的订阅和发布过程都需要对树进行遍历,当树极其庞大,特别是订阅客户端网络连接状况差时的频繁重连操作,对订阅树的遍历操作不断增加,降低了运行效率。

(2)优化方案

1)优化方案一

对于Mosquitto中订阅树搜索时存在的缺陷,使用键树的思想进行优化。主要优化方案是在订阅树根节点的下一个节点建立索引,索引为a-z的26个字母,第27个为其他字符,方便起见,存字母‘z的ASCII的下一个值‘{。

键树,又被称为数字查找树,它是一棵度大于等于2的树,树中的每个节点只包含组成关键字的符号,并不是一个或几个关键字。如关键字是数值,则节点中存储的为一个数位;如果关键字为单词,则节点中存储的为单词的字母字符。这种树形的结构会给类型为关键字查找的表带来方便。

键树有两种存储结构,树的孩子兄弟链表存储和树的多重链表存储。其中树的多重链表存储又叫做Trie树。若从键树中某个结点到叶子结点的路径上每个结点都只有一个孩子,则可将该路径上所有结点压缩成一个“叶子结点”,且在该叶子节点中存储关键字及指向记录的指针等信息。

根据键树中分支节点中的存储思想,将发布订阅树中的业务根节点的下一个结点设置为27个,存储从a-z的26个字符,第27个结点存储为其他字符。具体结构图如图5所示。

具体实现

首先,初始化业务子树的第一层叶子结点

然后,获取topic第一个片段的首字母,全变为小写字母,如果是a-z之间的英文字符,则进入对应的结点进行查找,否则进入第27个结点进行查找。

最后topic进行匹配查找,查找过程与原始Mosquitto相同,在函数_sub_search中完成。

2)优化方案二

根据Mosquitto中订阅树存在的缺陷,对Mosquitto的发布订阅机制进行优化。主要优化方法为将订阅树的存储方式变为哈希表存储。哈希表是通过关键码值对表直接进行访问的数据结构,也称为散列表。为了快速对表进行查找,通过算法函数将关键码值映射到表中的一个位置,而这个算法函数也称为散列函数或哈希函数。

本文使用哈希表存储主要是为了能够根据订阅主题快速查找到主题订阅者列表。有学者已经使用哈希表存储订阅主题和订阅者列表[26-27]。哈希表中的key值为订阅者订阅的主題,内容是从根节点到当前节点所组成的topic;value值为每个主题对应的订阅者列表的地址。哈希表组成如图6所示。

但是上述存储方式也存在一定的缺陷,当订阅主题量剧增,哈希表长度较长时,在匹配订阅主题时,需要进行较多的主题查找,效率低下。

本文提出在哈希表前边添加一个链表进行索引。首先,将订阅主题的第一个节点根据首字母进行分组,将大写字母统一变为小写字母,将第一个节点为非字母的分为一组;然后,申请一个长度为27的链表,前26个存储的为主题节点首字母为‘a-z的哈希表的开始地址,第27个为主题节点为非字母的其他节点开始地址。具体实现方式如图7所示。

(3)优化实现

订阅机制的优化主要集中在文件subs.c中,具体则涉及以下接口函数。

为了实现本次优化,在subs.c文件中添加了对哈希表操作的函数,和一个哈希表结构体。

struct my_struct{

char *name;

struct _mosquitto_subhier *sub_node;

UT_hash_handle hh;

};

其中,name是键(key);sub_node是值,保存结构体指针类型的节点;hh是内部使用的哈希处理句柄,只需要定义该变量,并不需要进行赋值。

首先,初始化一个空的哈希表为g_hash_topic_table,接下来为对哈希表的操作的主要函数。

其中,函数get_node_by_topic根据订阅主题调用HASH_FIND_STR函数获得订阅节点。

函数get_address_by_topic根据订阅主题首字母获取索引列表中存放的哈希表地址。

函数set_hash_topic调用HASH_ADD_KEYPTR函数实现对topic的添加。

函数del_node_by_topic调用HASH_DEL函数完成对节点的删除操作。

函数clear_hash_topic_table首先通过HASH_ITER对节点进行遍历,然后调用HASH_DEL删除节点。

函数db_messages_quick_queue实现对节点的查找并添加,例如发布消息给主题a/b/c,需要寻找a/#,a/b/#,a/b/c/#,a/b/c等结构。然后调用set_hash_topic实现节点添加。

函数send_topic实现对消息的发送功能。

同时在原有函数中对以上函数进行调用,改变了原有函数的功能。其中在函数mqtt3_sub_add中,主要完成订阅操作,首先根据订阅主题首字母获得哈希表中该主题可能所在地址范围,然后查看哈希表中是否存在该订阅主题,如果存在,则将订阅内容挂载到订阅列表中,如果不存在,则新建一个结构体存储订阅主题,订阅内容挂到该主题的订阅列表中。

函数mqtt3_db_messages_queue主要实现消息发布操作,对发布主题进行拆分,搜索以‘#结尾的子主题是否在哈希表中,如果存在则进行发送。

函数mqtt3_sub_remove和mqtt3_subs_clean_session主要实现清除哈希表中的context功能,首先查找该context对应的订阅主题是否存在于哈希表中,如果存在,则删除context,如果不存在,则直接返回。

函数mqtt3_retain_queue实现对context列表的保存操作,只需要根据context对应的订阅主题在哈希表中找到该context,然后调用函数_retain_process实现context的保存。

3.2 空闲空间管理机制优化

Mosquitto中并没有实现对空闲空间进行管理。当有连接断开时,将空闲出数组上的位置,等待有新的连接进来时,需要扫描整个context,如果找到位置则存放新产生的context,否则调用realloc函数创建一个空间。这种遍历查询context会使业务处理效率低下,并且realloc每次只分配一个内存空间,当有大量的连接进来时,并且没有空闲数组时,需要多次调用realloc函数;当存在大量的连接断开时,数组就会空闲出多个位置,造成资源的浪费。

针对上述问题,并参考相关学者的优化[28],在前人优化的基础上设置了最大空闲空间数,减少了资源的浪费。

首先,添加一个动态数组,用来存放空闲context的地址。

当有新的连接进来时,先在这个数组中查找是否有空闲的地址,如果有,直接插入,同时把动态数组中的索引地址删掉。

如果没有则调用realloc函数创建多个空间。例如1000个,然后将这些空间的地址放入动态数组中。

当存在大量的连接断开时,服务器就会存在大量的空闲空间,动态数组中存放了大量的地址索引,增加判定动态数组长度的功能,当达到一定的长度之后(例如10000个),将多余的地址所指向的空闲空间释放掉,维持一个较少量的空闲空间数。

4 测试与分析

为了验证对MQTT服务器Mosquitto优化之后的功能和性能,本章节对优化之后的Mosquitto进行测试。主要测试优化后Mosquitto能否实现发布订阅功能;对比优化前后Mosquitto在性能方面的变化,并对测试结果进行分析。

4.1 测试环境

测试环境包括硬件环境和软件环境。硬件环境的服务器内存大小为8GB,固态硬盘为256GB;虚拟机的内存为1GB、硬盘为20GB。软件环境中虚拟机操作系统为ubuntu-14.04.4-desktop-amd64;Mosquitto版本为1.01;测试工具为mqtt-benchmark。功能测试为局域网,性能测试为公共网,带宽为电信100Mbps。

4.2 测试内容与分析

(1)功能测试

首先检测能否开启Mosquitto服务器,其次检测能否完成消息的订阅发布功能。功能測试使用回送地址进行,实验设置开四个终端,其中一个终端负责开启服务器,一个终端负责发布消息,两个终端负责订阅消息。运行结果如图9至图12所示。

通过上图的实验结果可以得到优化之后的mosquitto可以实现开启服务的功能,并且可以进行对不同的订阅主题进行发布消息。订阅客户端也可以获得订阅消息。

(2)性能测试

性能测试通过使用测试工具mqtt-benchmark进行。对于虚拟机,192.168.226.136上用emqttd_benchmark测试,192.168.226.129上的Mosquitto服务器。

1)测试一

测试不同QoS级别下,原始Mosquitto与优化之后的Mosquitto在平均运行时长,平均时延方面的性能对比。实验设置10个发送客户端,每个客户端发送1000条消息,订阅客户端数量为1000,QoS分别为0,1,2情况下的结果图如图13所示。

从图中运行结果对比,随着QoS的增大,平均运行时长和平均时延不断增大,但是时延标准差总体成减小趋势,说明随着QoS的增大,传输越来越稳定。这是由于QoS越大,需要进行报文交换的次数也越多,导致服务器的性能以及网络负载增大,使得运行时长和时延增大,同时,时延也越稳定,符合预期设想。

此外,在三种级别的QoS情况下,优化之后的Mosquitto在平均运行时长和平均时延方面都要优于原始Mosquitto,所以优化之后的Mosquitto服务器在运行速度上有所提升。但是在时延稳定性方面,优化之后的Mosquitto服务器还存在改进的空间。同时,根据QoS在不同级别下的性能,可以得出在QoS要求不高的场景下,可以使用低级别的QoS来进行消息的传输,使得系统性能增大。

2)测试二

在QoS级别为0的情况下,测量不同消息发布数量情况下Mosquitto服务器的时延变化情况以及吞吐量情况。实验设置20个发送客户端,每个客户端发送10000、20000、30000、40000、50000、60000、70000个消息。

如图14所示,平均运行时长结果相差较小,但是原始的Mosquitto运行时的平均时延要大于优化之后的Mosquitto。

3)测试三

在QoS级别为0的情况下,测试同时在线时不同数量发送客户端情况下,运行时间、发送时延情况。实验设置每个客户端发送一条消息,分别测试发送客户端数量为1000、5000、10000、15000、20000。

如图15所示对比结果,当在线用户数量较少时,原始的Mosquitto在平均运行时长、平均时延、最大时延要小于优化之后的Mosquitto,并且传输稳定性也要高,性能上优于优化之后的Mosquitto,但是当活跃用户量增大时,优化之后的Mosquitto开始表现出较好的性能。

4)测试四

在QoS级别为0的情况下,测试每条信息在不同字节大小的情况下消息发送的情况,如图16所示。实验设置发送客户端数为20,每个客户端发送10条消息,发送消息大小分别为100b、1000b、10000b、100000b、1000000b、10000000b。

如表1、表2所示,当发送消息字节比较少的时候原始Mosquitto的发送平均时延要小于优化之后的,同时稳定性也更好,平均吞吐量也比较大,但是当发送消息字节数增大时,优化之后的Mosquitto在平均时延以及稳定性方面都优于原始的Mosquitto,并且吞吐量也更大。

综上所述,优化之后的Mosquitto在发送客户端数量、发送消息数量以及消息字节较大的时候,都要优于原始的Mosquitto,但是稳定性方面需要进一步的提升。

4 结束语

本文通过对MQTT协议的深入学习,以及MQTT消息代理服务器Mosquitto的研究,详细介绍了对于Mosquitto服务器内部功能实现的优化。首先,对MQTT协议中的关键点进行学习;其次,分析了Mosquitto的订阅/发布模式中的订阅树,提出了带分支节点订阅树和利用带分区的哈希表代替订阅树两种优化思想;然后,分析了Mosquitto中空闲空间遍历情况,提出了指定长度的动态数组存储空闲空间列表。最后,本文根据以上提出的思想进行测试,验证了优化之后的Mosquitto在负载较大的情况下更加高效。

虽然目前实现了对Mosquitto底层代码优化设计,但是根据测试过程中遇到的问题,本项目还有一些不足的地方,需要作为下一步的工作继续改进。

(1)由于开发时间紧张,导致一些功能还未进行添加,影响服务器的性能和稳定性。特别是在实际的网络环境中运行情况复杂,容易发生异常情况,需要增加日志记录功能和完善异常处理机制。

(2)缺少对每个优化情况的效果进行对比分析,需要分析各种优化情况对于性能改进的贡献比例,然后根据比例情況进行再次优化调整,不断提高Mosquitto的性能。

(3)对Mosquitto服务器安全方面没有进行考虑,需要提高安全认证机制。

(4)对Mosquitto还可以进行更加深入的扩展研究。针对不同的场景可以提出更好的优化方法。

基金项目:

1.国家自然科学基金(项目编号:61672104);

2.国家自然科学基金(项目编号:U1509214);

3.国家自然科学基金(项目编号:61702570)。

参考文献

[1] 弭宝瞳,梁循,张树森.社交物联网研究综述[J].计算机学报,2018,41(07):1448-1475.

[2] 张玉清,周威,彭安妮.物联网安全综述[J].计算机研究与发展,2017,54(10):2130-2143.

[3] Ganzha M, Paprzycki M, Paw?owski W, et al. Semantic interoperability in the Internet of Things; an overview from the INTER-IoT perspective ☆[J]. Journal of Network & Computer Applications, 2016, 81.

[4] Majchrzak T A, Groenli T M. Introduction to the Minitrack on Software Development for Mobile Devices, Wearables, and the Internet-of-Things[C]// Hawaii International Conference on System Sciences. 2018.

[5] Ghanbari A, Laya A, Alonso-Zarate J, et al. Business Development in the Internet of Things: A Matter of Vertical Cooperation[J]. IEEE Communications Magazine, 2017, 55(2):135-141.

[6] Stolpe M. The Internet of Things: Opportunities and Challenges for Distributed Data Analysis[M]. ACM, 2016.

[7] Handosa M, Gra?anin D, Elmongui H G. Performance evaluation of MQTT-based internet of things systems[C]// Simulation Conference. IEEE, 2018:4544-4545.

[8] 杨鹏.基于MQTT协议的信息推送平台系统的设计与实现[D].成都:电子科技大学,2015.

[9] Lee S , Kim H , Hong D K , et al. Correlation analysis of MQTT loss and delay according to QoS level[C]// Information Networking (ICOIN), 2013 International Conference on. IEEE Computer Society, 2013.

[10] 黄建洋,兰巨龙,胡宇翔,马腾.一种基于分段路由的多路径流传输机制[J].电子学报,2018,46(06):1488-1495.

[11] 任亨,马跃,杨海波,贾正锋.基于MQTT协议的消息推送服务器[J].计算机系统应用,2014,23(03):77-82.

[12] Baidu Inc. Mosquitto[OL]. http://baike.baidu.com/view/9923983.htm?fr=aladdin.

[13] Gough J, Smith G. Efficient recognition of events in a distributed system// Proceedings of the Australasian Computer Science Conference. Canberra, Australia, 1995: 173-179.

[14] Aguilera M K, Strom R E, Sturman D C, et al. Matching events in a content-based subscription system// Proceedings of the 18th ACM Symposium on Principles of Distributed Computing. Georgia, USA, 1999: 53-61.

[15] Bianchi S , Felber P , Gradinariu M . Content-based Publish/Subscribe using Distributed R-trees[J]. Lecture Notes in Computer Science, 2007:537-548.

[16] Hu H , Liu Y , Li G , et al. [IEEE 2015 IEEE 31st International Conference on Data Engineering (ICDE) - Seoul, South Korea (2015.4.13-2015.4.17)] 2015 IEEE 31st International Conference on Data Engineering - A location-aware publish/subscribe framework for parameterized spatio-textual subscriptions[C]// IEEE International Conference on Data Engineering. IEEE, 2015:711-722.

[17] Guo L , Chen L , Zhang D , et al. Elaps: An efficient location-aware pub/sub system[C]// IEEE International Conference on Data Engineering. IEEE, 2015.

[18] 李强.多个Zigbee监测网络远程监控的实现[J].微计算机信息,2007(07):141-143.

[19] 蒋鹏,袁嵩.基于MQTT协议的综合消息推送[J].现代计算机(专业版),2014(11):11-15+21.

[20] 姜妮,张宇,赵志军.基于MQTT物联网消息推送系统[J].网络新媒体技术.2014(6):62-64.

[21] 贾军营,王月鹏,王少华.基于MQTT协议IM的研究和实现[J].计算机系统应用.2015(07):9-14.

[22] 李宏,郭江波.基于MQTT协议的Android手机防盗方法[J].无线电工程,2018,48(05):357-361.

[23] 方霞.基于MQTT协议的农业物联网消息推送系统[J].计算机技术与发展,2018,28(09):168-171.

[24] 崔自赏,陈冰,艾武,黄明强.基于MQTT协议的物联网电梯监控系统设计[J].电子测量技术,2018,41(07):114-119.

[25] 曾昂,李宁,严俊.Mosquitto大文件传输方式的研究与改进[J].计算机工程与应用,2017,53(04):123-127.

[26] 郑峰.基于MQTT的云推送平台的研究及应用[D].杭州:杭州电子科技大学,2016.

[27] 逍遥子_. Mosquitto的优化[OL]. https://blog.csdn.net/houjixin/article/details/46413783.

[28] 逍遥子_. Mosquitto的优化[OL].   https://blog.csdn.net/houjixin/article/details/46413941.

[29] 刘志诚.物联网网络信息安全生态体系构建新论[J].网络空间安全,2018,9(12):85-89.

作者简介:

陈福(1973-),男,汉族,辽宁朝阳人,北京科技大学,博士,中央财经大学信息学院,教授;主要研究方向和关注领域:下一代互聯网、物联网。

李娜(1992-)女,汉族,山东滨州人,中央财经大学信息学院,硕士;主要研究方向和关注领域:物联网、机器学习。

朱建明(1965-),男,汉族,山西太原人,西安电子科技大学,博士,中央财经大学信息学院,教授;主要研究方向和关注领域:信息安全,区块链技术。

黄勇峰(1991-),男,汉族,中央财经大学信息学院,硕士;主要研究方向和关注领域:下一代互联网。

张艳梅(1976-),女,汉族,吉林市人,中国矿业大学(北京),博士,中央财经大学,副教授;主要研究方向和关注领域:商务智能、服务计算、金融监管。