IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MQTT协议 -> 正文阅读

[嵌入式]MQTT协议

目录

1、MQTT介绍

2、发布、订阅模式

3、MQTT的工作层

4、MQTT轻量级的体现

5、MQTT的三种消息发布服务质量

6、MQTT的心跳和连接

7、MQTT的主题

8、MQTT的保留消息

9、MQTT的遗嘱

10、相比于HTTP,MQTT有哪些优势?

?11、相关资料

MQTT协议中文版

12、?MQTT协议实现方式

13、MQTT客户端

14、MQTT服务器

15、MQTT协议中的订阅、主题、会话

订阅(Subscription)

会话(Session)

主题名(Topic Name)

主题筛选器(Topic Filter)

负载(Payload)


1、MQTT介绍

MQTT全称是消息队列遥测传输(Message Queuing Telemetry Transport),是一种专为计算能力低的客户端设计的基于发布/订阅(Publish/Subscribe)模式的“轻量级”通讯协议。

先来了解一下MQTT的基本设计思路:

2、发布、订阅模式

这是一个很经典的一对多消息发布模式了,像Redis就具有发布订阅功能。举一个具体的例子,我们有一个漫画家、有很多想看漫画的肥宅,先约定一个共同的主题叫做"连载漫画专栏",肥宅们非常想看下一期漫画,于是“订阅”了这个专栏,并一直"监听"着是否有新漫画到达。每当漫画家“发布”一期新漫画到这个专栏,所有的肥宅都能“消费”相同的下一期“漫画”,漫画家只需要往这个主题“连载漫画专栏”里面发布漫画,无需关心是哪些肥宅在看;肥宅们只需要订阅和监听“连载漫画专栏”,就能够第一时间得到最新漫画内容。

回到物联网,有非常多这种一对多消息发布的需求。例如一台温度传感器上传了温度数据,监控日志面板服务希望得到数据好去绘图、温度异常服务希望感知温度异常好做相应操作、手机推送服务希望能够及时地获取最新温度好呈现给手机端展示,这就是一对多的典型需求。

相比于一个一个地主动投递消息,发布订阅这种被动获取减少了生产者的负担,解除了耦合,提高了消息传输效率。

3、MQTT的工作层

MQTT工作于应用层,是基于TCP/IP之上的可靠连接,当然也有UDP版本叫做“MQTT-SN”,通常使用的都是TCP版。

4、MQTT轻量级的体现

MQTT的报文头部只有2字节,它一开始就假设了客户端是计算能力低需要节省资源的设备,用约定好的二进制位来传递控制消息,省电省流量。

5、MQTT的三种消息发布服务质量

【QoS0】最多一次,不管成功与否

这是最省电但最不可靠的方式,完全依赖底层TCP/IP网络,可能会发生消息丢失和重复。通常应用于物联网设备上报最新数据,例如温度传感器不断地上传最新温度,这次的数据丢了马上又会有下一次,所以丢失无所谓;由于只是修改状态,具有幂等性,无论重复传输多少次,结果都是一样的,所以重复也无所谓。

【QoS1】至少一次,保证消息到达,可能重复

在QoS0之上保证了消息一定会送到,重复无所谓(通常重复的概率很低),但必须要让消费者看见这条消息,这是最常用的服务质量,应用于手机推送消息等各项服务的数据生产消费。假设你的温度传感器监控到温度异常可能着火了,手机APP收到多条着火消息和一条着火消息都收不到,当然是收到多条着火消息更好了。

【QoS2】只有一次,保证消息只到达一次

这种当然是最好的情况,但这也是最费电、流程最复杂的情况,大部分物联网大厂都不支持QoS2,因为根本没有这种需求。通常QoS2用于支付,如果支付的数据丢失、或者多次重复支付,都是很难容忍的。或者用于手机聊天消息,手机APP只能接收到一条聊天消息推送,消息的丢失和重复都是不可以的,这种场景直接用HTTP服务器就好了啊,大家都是强大的手机又不是低功耗嵌入式设备。

6、MQTT的心跳和连接

MQTT维护了双工长连接,通过心跳机制来判断是否掉线。不要担心心跳机制给嵌入式设备带来的负担,通常这个心跳间隔都设置得很长,例如60秒。

7、MQTT的主题

MQTT的主题长这个样子:“/mydevice/abc”、"/mydevice/+/confs"、"mydevice/qwer/#"。

第一个是最普通的精确主题,用斜杠分隔主题层级。

第二个是通配符主题,“+”只能匹配一层的主题,例如“/mydevice/123/confs”是可以匹配的,"/mydevice/123/aaa/confs"是无法匹配的。

第三个是通配符主题,"#"可以匹配多层,但只能在末尾,例如"mydevice/qwer/aaa/123"是可以匹配的。

8、MQTT的保留消息

MQTT设置了一个保留消息(Retain Message),这是基于主题的,每个主题可以有一条保留消息,如果有新的订阅者订阅了该主题,就需要将这条保留消息推送给它,通常用于新订阅主题的设备初始化。

9、MQTT的遗嘱

MQTT设置了一个遗嘱消息(Will Message),这是基于客户端的,每个客户端在连接的时候可以保留一条遗嘱消息,当连接异常断开(例如网络中断、客户端崩溃、心跳信息没有发送)没有发送正常的DISCONNECT报文的时候,会将这条消息分发给订阅了这个遗嘱消息的客户端,其他客户端就知道它发生问题了,从而做相应的处理,通常用于设备的异常通知,例如当设备正常退出,手机APP需要显示设备正常退出,当设备异常退出,手机APP需要报警,那么手机APP只需要订阅设备的遗嘱消息,就能够知道它断开时是正常的还是异常的了。

10、相比于HTTP,MQTT有哪些优势?

?11、相关资料

MQTT协议中文版

https://github.com/mcxiaoke/mqtt/blob/master/README.mdhttps://github.com/mcxiaoke/mqtt/blob/master/README.md

12、?MQTT协议实现方式

?

实现MQTT协议需要:客户端和服务器端

MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分。

Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。

payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

13、MQTT客户端

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:

发布其他客户端可能会订阅的信息

订阅其它客户端发布的消息

退订或删除应用程序的消息

断开与服务器连接

14、MQTT服务器

MQTT服务器以称为“消息代理”(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:

接受来自客户的网络连接

接受客户发布的应用信息

处理来自客户端的订阅和退订请求

向订阅的客户转发应用程序消息

15、MQTT协议中的订阅、主题、会话

订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

主题名(Topic Name)

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

负载(Payload)

消息订阅者所具体接收的内容

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 19:08:40  更:2022-05-21 19:09:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:28:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码