1.本文概述
本文主要介绍MQTT相关的概念,并且通过搭建MQTT服务器和客户端,测试MQTT的通信。本文主要从实际使用的角度去理解MQTT,并不会讲述过于深奥的理论知识。可以通过下面的文章了解MQTT的相关介绍。
2.MQTT基本介绍
MQTT的全称为Message Queuing Telemetry Transport,也就是消息队列遥测传输。1999年,IBM公司的Andy Stanford-Clark 和来自Eurotech公司的Arlen Nipper创造了MQTT协议。其中“MQTT”中的“MQ”是来自IBM的MQ系列消息队列产品线。
MQTT最初的用法是在石油管道控制中,将每一个节点的信息通过卫星传到到控制中心去。所以MQTT从创立之初就是为物联网创立。
那么什么是MQTT协议呢?简单地说,主要有下面三个特点:
(1)协议本身基于TCP/IP,轻量级的发布和订阅
(2)开放的协议
(3)简单,容易实现
所以该协议可以应用于各种环境中,非常适合需要低功耗而且带宽有限的IoT场景中,比如:
- 遥感数据
- 汽车
- 智能家居
- 智慧城市
- 医疗医护
运用MQTT协议,设备可以很方便的接入物联网服务,管理并处理数据,最后应用到各种业务场景
3.mqtt服务器的搭建
目前服务器的搭建环境是ubuntu16.04
采用的服务器是mosquitto,官方网站https://mosquitto.org
在控制台上输入下面的命令进行下载。
代码语言:javascript复制wget https://mosquitto.org/files/source/mosquitto-1.5.7.tar.gz
下载完成后解压并进入mosquitto-1.5.7目录
在编译时,先安装gcc编译工具,然后下载依赖的环境
代码语言:javascript复制sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install uuid-dev
最后执行 make
开始编译,编译完成后输入 sudo make install
安装程序。
接着配置服务器相关信息
代码语言:javascript复制sudo cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
sudo vim /etc/mosquitto/mosquitto.conf
添加一个用户,如下图所示
这样,mqtt服务器就安装完成了。
下面启动服务器
代码语言:javascript复制mosquitto -c /etc/mosquitto/mosquitto.conf -v
测试
对于MQTT协议来说,有一个非常关键的模式:发布/订阅模式。发布/订阅模式(pub / sub)是传统客户端 - 服务器模型的替代方案,客户端直接与端点通信。然而,Pub / Sub将正在接收消息(称为订户)的另一客户端(或更多客户端)发送特定消息(称为发布者)的客户端去耦,这意味着发布者和订阅者不了解彼此的存在,有一个第三个组件,称为代理,由它作为中转,它将过滤所有传入的消息并相应地分发给它们,所以我们来详细介绍一下刚刚提及的方面。
订阅者
订阅者的角色要保持长连接状态,我们可以另外开一个控制台窗口进行测试订阅一个topic01的主题,去接收这个主题的消息。
代码语言:javascript复制mosquitto_sub -v -t topic01
这个过程可能会遇到如下的错误
解决办法
代码语言:javascript复制sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
这样订阅者就处于不断等待消息到来的模式。
发布者
这时可以另外再开一个控制台,去发布topic01主题的消息。
代码语言:javascript复制mosquitto_pub -t topic01 -m "123456"
不难看出,我们的订阅者已经接收到消息了。
4. mqtt客户端的使用
对于mqtt客户端的使用,可以测试mqtt,所以我们的环境选择Windows平台。可以使用MQTT.fx。
MQTT.fx 是目前主流的mqtt客户端,可以快速验证是否可以与IoT Hub 服务交流发布或订阅消息。设备将当前所处的状态作为MQTT主题发送给IoT Hub,每个MQTT主题topic具有不同等级的名称,如“建筑/楼层/温度。” MQTT代理服务器将接收到的主题topic发送给给所有订阅的客户端。
下载地址:http://www.jensd.de/apps/mqttfx
安装最新的版本就可以了
由于我们前面已经在ubuntu上搭建好了MQTT服务器,所以接下来直接使用
点击publish即可在我们的订阅者上监听到消息
同时MQTT.fx 也可以作为监听者
这样我们就创建好了一个mqtt本地的测试环境。
5. 总结
本次的实验目的是体验一下mqtt的数据传输,同时学习了mqtt的一些基本的使用方法,后面会详细介绍物联网通信以及云服务器相关的知识,本文并没有详细介绍mqtt具体在项目中的使用方法,后面再做完善。