物联网MQTT协议分析和开源Mosquitto部署验证

  a.最多一次(Atmost alt="" width="623" height="135" />

 

  b.最少一次(Atleast alt="" width="623" height="257" />

 

  c.仅仅一次(Exactlyonce delivery):QoS=2,最高级别的服务质量,消息丢失和重复都是不可接受的。

  

 

  1.6、支持MQTT协议的服务器和客户端

  当前流行的开源代理服务器(MQTT Broker)的实现有:mosquitto, HiveMQ, Apache ActiveMQ, RabbitMQ, mosca等,MQTT客户端也有不同操作系统和编程语言下的实现,流行的客户端库(MQTT ClientLibraries)有:Eclipse Paho(支持C,C++, Java, Javascript, Python, Go, C#), M2MQTT(C#), Fusesource MQTTClient(Java), MQTT.js(javascript), libmosquitto(c/c++)等等,通过以上库而开发出的MQTT客户端应用程序有:mosquitto_pub/mosquitto_sub(可运行于Linux, Windows, MacOSX操作系统), HiveMQWebsocket Client(Web browser), MyMQTT(Android), MQTTLens(Google Chrome)等等。

  二、Mosquitto部署验证

  2.1、Ubuntu下安装Mosquitto

  1.源码包下载:http://mosquitto.org/files/source/

  版本:mosquitto-1.4.tar.gz

  解压:tar -zxvf mosquitto-1.4.tar.gz

  进入目录:cd mosquitto-1.4

  2.编译安装

  打开配置文件,去掉暂且不需要的功能:

  vi config.mk

  如:WITH_TLS,WITH_TLS_PSK, WITH_SRV, WITH_WEBSOCKETS, WITH_SOCKS, WITH_UUID等

  

 

  保存退出:wq

  安装mosquitto

  make

  make install

  2.2、启动mosquitto服务器

  mosquitto默认以mosquitto用户启动,所以首先创建mosquitto用户:

  adduser mosquitto

  启动代理服务器:mosquitto -c/etc/mosquitto/mosquitto.conf.example

  

 

  在启动服务器过程中有可能遇到以下错误:找不到libmosquitto.so.1文件,解决方法是添加链接库路径:

  vi/etc/ld.so.conf.d/liblocal.conf

  /usr/local/lib64

  /usr/local/lib

  退出文件后刷新:ldconfig

  重新执行:mosquitto -c /etc/mosquitto/mosquitto.conf.example

  2.3、启动订阅者客户端mosquitto_sub,订阅test主题

  mosquitto_sub客户端应用程序位于/mosquitto-1.4/client目录下,执行./mosquitto_sub-t test, -t表示主题过滤器属性,后面带指定的主题过滤器。

  

 

  2.4、启动发布者客户端mosquitto_pub,并且多次发布主题信息

  ./mosquitto_pub-t test -l

  其中-t表示发布的主题名,主题名中不允许包含通配符,-l是指通过标准输入的方式输入将要发布的应用信息,更多的属性可通过:./mosquiito_pub --help了解,也可通过官网了解:

  http://mosquitto.org/man/mosquitto_pub-1.html。

  

 

  发布者发布应用信息:

  

 

  2.5、发布者通过键入”Ctrl+D”向服务器发送DISCONNECT控制报文,然后正常退出

  

 

  如果通过”Ctrl+C”终止客户端程序(异常网络断开),服务器将提示:Scoket error

  

 

  本篇文章初步讲述了MQTT协议及以其中的一种实现为例进行部署和体验,协议的详细具体内容如控制报文格式等,读者可自行到官网下载文档查阅,也可以关注嵌入式企鹅圈来获取共享资源。

 

  接下来会对Mosquitto的mosquito_pub发布者的客户端源码框架进行深入分析,掌握MQTT的实现和编程。