您的位置:首页 > 编程语言 > Qt开发

搭建MQTT协议环境

2015-11-26 10:14 766 查看

搭建 MQTT协议环境

MQTT协议简介

Mosquitto环境搭建流程

Mosquitto的优缺点

MQTT协议简介

MQTT,全称Message Queuing Telemetry Transport,译为:消息队列遥测传输协议。它是由IBM公司开发的一个轻量级的、基于代理的发布/订阅消息即时通讯协议,目前常用版本为v3.1、v3.1.1。在物联网、移动终端设备提供消息推送服务,可以更好地实现远程控制。其相较于XMPP(其消息体用的是xml)、HTTP,MQTT更加轻量级、且占用用户很少的带宽。

MQTT规定了3种消息传递服务质量(QoS):

QoS值描述
0At most once(至多1次),一般适用于丢失一次记录无所谓;<= 1
1At least once(至少1次),确保消息到达,但可能会发生重传;‘>= 1
2Exactly once(只有1次),确保消息到达1次,消息不能丢失或重传;== 1

Mosquitto环境搭建

http://mqtt.org/software这里提供了IBM官方推荐的各种Brokers/Servers,及支持的各种语言版本的API,可以根据自己的实际情况选择不同的版本。这里我使用Mosquitto(用C来写的,比较容易看懂!),下面简单介绍它的安装和注意事项:

Mosquitto源代码下载并解压

wget http://mosquitto.org/files/source/mosquitto-1.3.4.tar.gz

tar –xzvf mosquito-1.3.4.tar.gz

进入目录编译

cd mosquito-1.3.4

make

当然,这里会出现一些错误,根据错误提示逐个解决:

1) ./mosquitto_internal.h:27:27: fatal error: openssl/ssl.h: No such file or directory

解决办法:安装OpenSSL库(即:sudo apt-get install libssl-dev)

2) ./mosquitto_internal.h:40:20: fatal error: ares.h: No such file or directory

解决办法:修改config.mk文件中的WITH_SRV:=yes为WITH_SRV:=no

3) g++: Command not found

解决办法:安装g++(即:sudo apt-get install g++)

安装完成

sudo make install

简单测试

1) 启动代理服务并打印调试信息(-v)

mosquitto -v



2) 指定主题

mosquitto_sub -v -t sensor(-t指定主题为test)

注意:这里会出现一个错误,即mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory. 即找不到libmosquitto.so.1.

重新连接该文件的位置,如下:sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1并更新动态链接库sudo ldconfig即可。



3) 发布内容

mosquitto_pub –t sensor –m 123456789(-m后面为发布的内容)



4) 测试结果

在mosquitto_sub端窗口发现打印出了“sensor 123456789”,跟发布端发布的消息相同,即表明测试结果正确!

5) 本次测试在Linux虚拟机中打开了3个终端窗口,分别代表代理服务器、发布者和订阅者,它们之间的联系如下图所示:



Mosquitto的优缺点

对Mosquitto源代码的分析发现,Mosquitto程序使用订阅树的方式来维护客户端之间的订阅/发布消息,逻辑清晰,便于开发维护;但是,订阅树使用遍历的方式查找,当节点较多或客户端数量较多时,明显地遍历过程效率较低。(遍历过程涉及到:订阅、发布、取消订阅)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息