MQTT协议概述(基本框架、测试工具)
文章目录
其实在桦桦看来MQTT和现在的微博,抖音是一样的,你订阅了哪个博主,或者网红后,当他们发布一个视频内容后,就会先发布在微博或者抖音的云服务器上,然后云服务器是知道你订阅了这些博主,就会把这些内容发布到你们的账号上。
相反,如果别人也订阅了你,你也可以发布消息,你的粉丝就可以看到了。
1 概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和因特网连接起来,被用来当做传感器的通信协议。
MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。
在网络模型里,TCP是传输层协议,HTTP和MQTT是应用层的协议。TCP是HTTP和MQTT底层的协议。
1.1 先谈http
HTTP虽然实现简单、可控性强,部署硬件成本低。但是依旧有很多不足。
HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。
HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,另外,实时性差
1.2 MQTT特点
MQTT的优点:协议简洁轻巧,数据冗余量低。并且支持的设备从智能硬件到智能手机无所不包。
MQTT的缺点:服务器端实现难度大,虽然已经有了C++版本的服务端组件,但是并不开源。而且在推送数量较大时如何处理并发是十分考验后台人员的技术水平的。
MQTT主要有如下的特点。
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
2、对负载内容屏蔽的消息传输。
4、有三种消息发布服务质量:QOS0,QOS0,QOS1.
5、小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量:
2 MQTT的基本框架
和微博,抖音机理一样,发布方可以是订阅方,订阅方也可以是发布方,你既可以去订阅别人的,同时你自己也可以当网红给别人发布内容。
换成物联网里面的概念,发布方就是带有传感器的开发板,代理一般是现在各个云平台,订阅方可以是云平台,也可以是app,同样也可以是另外的嵌入式设备。订阅方可以给发布方下发命令,也可以接受发布方上传的数据。
这里面有一个主题的概念,主题就是相当于专栏,每个主题都是不一样的内容与功能。
2.1 Broker
这里的Broker就是云服务器,Broker 负责接收 Publisher 的消息,并发送给相应的 Subscriber,它是整个 MQTT 订阅/发布的核心。
现在各个云平台,例如阿里云,腾讯云,百度云都提供Broker的服务。
2.2 MQTT Client
任何终端,嵌入式设备,服务器,windows,Linux,只要运行了 MQTT 的库或者代码(app),我们都称为 MQTT 的 Client。
Publisher 和 Subscriber 都可以属于是 Client,Pushlisher 或者 Subscriber 只取决于该 Client 当前的状态——是在发布还是在订阅消息。
一个 Client 可以同时是 Publisher 和 Subscriber。
3 MQTT协议
MQTT 协议数据包由下面三个部分组成:
- 固定头(Fixed header):存在于所有的 MQTT 数据包中,用于表示数据包类型及对应标识,表明数据包大小;
- 可变头(Variable header):存在于部分类型的 MQTT 数据包中,具体内容由相应类型的数据包决定;
-
消息体(Payload):存在于部分 MQTT 数据包中,存储消息的具体数据。
需要MQTT协议文档的,可以私聊我。
4 MQTT的几个概念
4.1 服务质量(QoS)
MQTT 为不同的场景提供了三个级别的服务质量,允许客户端指定自己想要的可靠性级别。
其实就和我们收快递一样,0等级就是只把你的包裹放在家门口,不通知你,1等级就是会打电话通知你,2等级就是除了打电话,还会给你发短信或者客服询问你。
- QoS Level 0:至多一次
这是最简单的级别,无需客户端确认,我们个人使用,这个等级就足够了,而且开销不大。
- QoS Level 1:至少一次,有可能重复
确保至少向客户端发送一次信息,不过也可发送多次;在接收数据包时,需要客户端返回确认消息(ACK 包)。这种方式常用于传递确保交付的信息,但开发人员必须确保其系统可以处理重复的数据包。
-
QoS Level 2:只有一次,确保消息只到达一次
我们一般不使用这个级别,各个云平台现在也不支持这个等级。
4.2 遗嘱
MQTT协议提供了检测方式,利用KeepAlive机制在客户端异常断开时发现问题。因此当客户端电量耗尽、崩溃或者网络断开时,消息代理会采取相应措施。
客户端会向任意点的消息代理发送“临终遗嘱”(LWT)信息,当消息代理检测到客户端离线(连接并未关闭),就会发送保存在特定主题上的 LWT 信息,让其它客户端知道该节点已经意外离线。
4.3 安全性
使用安全传输层协议(TLS)。
5 测试工具MQTT.fx
我们在使用c设备接入各个云平台前,一般都要用MQTT.fx进行测试。每个云平台上都有相应的官方手册。
下面是MQTT.fx的下载地址
http://mqttfx.jensd.de/index.php/download
6 Paho库和mosquitto库
mqtt.fx 虽然超级好用,但是只能用来测试使用,在实际开发中,我们需要自己编写 MQTT 客户端,
- 比如:
微信小程序:JavaScript
PC 端:Python、Java、C#……
安卓端:Java
嵌入式设备:C
现在比较主流的两个MQTT库就是Paho库和mosquitto库。
前者包括现在几乎所有的主流语言,后者主要用于C设备。
6.1 paho
-
下面是paho的官网
https://www.eclipse.org/paho/ -
Eclipse paho 项目是开源的,源码全部在 Eclipse 官方 Github 上:
https://github.com/eclipse/
6.2 mosquitto
-
下面是mosquitto的库网站
https://mosquitto.org/
本文地址:https://blog.csdn.net/weixin_46027505/article/details/107892232
上一篇: STM32之PWM的使用