初识 MQTT (基于 mosquitto)

目录

一、什么是MQTT

 二、MQTT 的主要特性

1)MQTT 的消息类型(Message Type)

2)消息质量(QoS)

3)遗愿标志(Will Flags)

4)连接保活心跳机制(Keep Alive Timer)

三、mosquitto库

四、Ubuntu 源码安装 mosquitto

1、下载源码包

2、解压

3、进入目录

4、编译

5、运行安装( prefix=(指定安装的路径))

五、测试mosquitto订阅与发布

1、mosquitto_sub 命令参数说明

2、mosquitto_pub 命令参数说明

3、关闭

六、常用的mosquitto库函数


做完 MQTT 项目后做个总结(其实这篇文章很久已经编译了,但是今天才发布[苦笑])

一、什么是MQTT

MQTT(Message Queuing Telementry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subsribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM公司在1999年发布。MQTT最大有点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IOT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型设备中广泛使用。

 二、MQTT 的主要特性

1)MQTT 的消息类型(Message Type)

固定报文头中的第一个字节包含连接标志(Connect Flags),连接标志用来区分MQTT的消息类型。MQTT协议拥有14种不同的消息类型(如下表),可简单分为连接终止、发布和订阅、QoS 2消息的机制以及各种确认ACK。至于每一个消息类型会携带什么内容,这里就不多阐述了。

2)消息质量(QoS)

MQTT 消息质量有三个等级:QoS 0, QoS 1 和 QoS 2。

QoS 0:最多分发一次。消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。

QoS 1:至少分发一次。服务器的消息接收由PUBACK消息进行确认,如果特性链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条消息头中设置了DUP位的消息。

QoS 2:只分发一次。这是最高级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。

3)遗愿标志(Will Flags)

在可变报文头的连接标志位字段(Connect Flags)里有三个Will 标志位:Will Flags、Will QoS 和 Will Retain Flags,这些Will 字段用于监控客户端与服务器之间的连接状况。如果设置了Will Flags,就必须设置Will QoS和Will Retain标志位,消息主体中也必须有Will Topic和Will Message字段。

那遗愿消息是怎么回事呢?服务器与客户端通信时,当遇到异常或客户端心跳超时的情况,MQTT服务器会替客户端发布一个Will消息。当然如果服务器收到来自客户端的DISCONNECT消息,则不会触发Will消息的发送。 因此,Will字段可以应用于设备掉线后需要通知用户的场景。

4)连接保活心跳机制(Keep Alive Timer)

MQTT客户端可以设置一个心跳间隔时间(Keep Alive Timer),表示在每个心跳间隔时间内发送一条消息。如果在这个时间周期内,没有业务数据相关的消息,客户端会发一个PINGREQ消息,相应的,服务器会返回一个PINGRESP消息进行确认。如果服务器在一个半(1.5)心跳间隔时间周期内没有收到来自客户端的消息,就会断开与客户端的连接。心跳间隔时间最大值大约可以设置为18个小时,0值意味着客户端不断开。

三、mosquitto库

mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。
在实验中使用mosquitto库函数来实现订阅与发布。
mosquitto库函数源码:https://mosquitto.org/api/files/mosquitto-h.html

四、Ubuntu 源码安装 mosquitto

1、下载源码包

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

2、解压

tar -xzvf mosquitto-1.5.5.tar.gz

3、进入目录

cd mosquitto-1.5.5/

4、编译

make

5、运行安装( prefix=(指定安装的路径))

make install prefix=/home/iot23/mqtt

五、测试mosquitto订阅与发布

1、mosquitto_sub 命令参数说明

1. -c  设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
2. -d  打印debug信息
3. -h  指定要连接的域名  默认为localhost
4. -i 指定clientId
5. -I 指定clientId前缀
6. -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
7. -q 指定希望接收到QoS为什么的消息  默认QoS为0
8. -R 不显示陈旧的消息
9. -t 订阅topic
10. -v 打印消息
11. --will-payload  指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
12. --will-qos  Will的QoS值。该参数需要与--will-topic一起使用
13. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
14. --will-topic  用户发送Will消息的topic

2、mosquitto_pub 命令参数说明

1. -d  打印debug信息
2. -f  将指定文件的内容作为发送消息的内容
3. -h  指定要连接的域名  默认为localhost
4. -i  指定要给哪个clientId的用户发送消息
5. -I  指定给哪个clientId前缀的用户发送消息
6. -m  消息内容
7. -n  发送一个空(null)消息
8. -p  连接端口号
9. -q  指定QoS的值(0,1,2)
10. -t  指定topic
11. -u  指定broker访问用户
12. -P  指定broker访问密码
13. -V  指定MQTT协议版本
14. --will-payload  指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
15. --will-qos  Will的QoS值。该参数需要与--will-topic一起使用
16. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
17. --will-topic  用户发送Will消息的topic

3、关闭

# 查看mosquitto服务进程ID
ps -aux | grep mosquitto
 
# 杀掉服务进程
# PID 为上一步查找的ID
kill -9 PID

六、常用的mosquitto库函数

mosquitto库的API:https://mosquitto.org/api/files/mosquitto-h.html
接下来将会介绍常用的一些函数,剩下的API读者可依据上述链接自行学习。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MQTT是一种轻量级的通讯协议,适用于物联网设备之间的通信。Mosquitto是一款开源的MQTT代理服务器,它提供了可靠稳定的MQTT消息传递服务。为了满足用户的需求,开发人员推出了一款名为MQTT测试工具的软件,它可以用来测试Mosquitto代理服务器的性能和功能。 MQTT测试工具可以支持多种MQTT协议,包括QoS0、QoS1和QoS2。此外,它还支持通过清除session或发送遗嘱消息来测试Mosquitto的断开连接机制。MQTT测试工具可以达到每秒数千条消息的处理速度,可帮助用户提高Mosquitto代理服务器的性能和功能。 通过使用MQTT测试工具可以实现较低的错误率和较高的消息交付率,从而提高设备之间的通信效率和数据传输的质量。此外,它还支持各种操作系统,如Windows、Linux和MacOS等。 总之,MQTT测试工具是一款非常实用的软件,适用于测试MQTT消息传递的各种参数和功能,帮助提高Mosquitto的性能和功能,让设备之间的通信更加高效。 ### 回答2: MQTTMosquitto)是一种轻量级的通信协议,用于基于订阅/发布模型的物联网设备之间的交互。针对MQTT协议,我们需要使用MQTT测试工具,这样我们才能测试MQTT的各种功能。 Mosquitto是一种流行的MQTT实现。这个工具是一个开源项目,它可以运行在多个平台上,从而使我们能够轻松地测试MQTT应用程序。Mosquitto提供了可用的CLI(命令行界面),为开发者们提供了良好的操作性。它还提供了一些基本测试,包括测试客户端的连接效果和性能。此外,它提供了一些高级测试,如消息订阅的特征、多连接质量、最大qos的处理和消息重传等。 Mosquitto支持基于TLS的安全通讯协议,自动重连功能,多SPS(会话)管理以及客户端订阅策略等等。Mosquitto是一个功能强大的MQTT测试工具,为MQTT开发人员提供了一个好的平台,能够测试他们的MQTT应用程序,并在需要时进行调整。 总之,MQTT测试工具Mosquitto是一款非常好的工具,它能够提高MQTT应用程序的可靠性和性能,同时为MQTT开发人员提供了一个好的平台,使他们能够更有效地测试和调整他们的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值