我的账户
52监测网

安全监测行业网站

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

[知识科普] MQTT协议详解

[复制链接]
383 0
仪大部 发表于 2024-8-28 16:27:07 | 只看该作者 |阅读模式 打印 上一主题 下一主题

一分钟快速注册,登录后可查看、下载更多资源。

您需要 登录 才可以下载或查看,没有帐号?立即注册     

x
本帖最后由 仪大部 于 2024-8-28 16:32 编辑

MQTT协议介绍:

1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。

3、实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

4、MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。


MQTT协议使用说明:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布,目前最新版本为v3.1.1。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。
当然,在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,

应用消息 Application Message:
MQTT协议通过网络传输应用数据。应用消息通过MQTT传输时,它们有关联的服务质量(QoS)和主题(Topic)。

客户端Client:
使用MQTT的程序或设备。客户端总是通过网络连接到服务端。
它可以发布应用消息给其它相关的客户端。
订阅以请求接受相关的应用消息。取消订阅以移除接受应用消息的请求。从服务端断开连接。
一般情况,云下设备==客户端


服务端 Server:
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。
服务端接受来自客户端的网络连接。接受客户端发布的应用消息。处理客户端的订阅和取消订阅请求。转发应用消息给符合条件的已订阅客户端。
(服务端不是数据的终点,它只是数据的中转站)
(一般情况下,云平台==服务端)

订阅 Subscription:
订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。
订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器。

主题名 Topic:
Name附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。

主题过滤器 Topic Filter:
订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。

会话 Sessiond:
客户端和服务端之间的状态交互。一些会话持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接间扩展。

控制报文 MQTT Control Packet:
通过网络连接发送的信息数据包。MQTT规范定义了十四种不同类型的控制报文,其中一个(PUBLISH报文)用于传输应用消息。

ASCII:0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

GBK:汉字内码扩展规范(国标)。
采用单/双字节变长编码,完全兼容AsCH字符编码英文使用单字节编码,中文部分采用双字节编码。

UTF-8:是一种针对 Un i code的可变长度字符编码,又称万国码。

UTF-8用1到6个字节编码 Uni code字符。
可以表示中文简体繁体及其它语言(如英文,日文,韩文)。

注意:即使是同一个汉字,在不同的编码中所对应的数值/长度是不同的(如:GBK/UTF-8安信可IDE默认是GBK编码,MTT规定为UTF-8编码。
如果使用安信可编译器编程发送汉字,需将安信可IDE的编码方式设为UTF-8。

清理会话 Clean Session:
当MTT客户端接入MTT服务端时,选择是否继续之前的会话。
如果不清理会话,MTT服务端会在之前交互的基础上,继续交互如果清理会话,MTT服务端必须新建一个全新的会话。

MQTT的特点:
消息质量(QoS)
MQTT消息质量有三个等级,QoS 0,QoS 1和 QoS 2。

QoS 0:最多分发一次。消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。
QoS 1:至少分发一次。服务器的消息接收由PUBACK消息进行确认,如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条在消息头中设置了DUP位的消息。
QoS 2:只分发一次。这是最高级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。

eg.
目前流行的共享单车智能锁,智能锁可以定时使用QoS level 0质量消息请求服务器,发送单车的当前位置,如果服务器没收到也没关系,反正过一段时间又会再发送一次。之后用户可以通过App查询周围单车位置,找到单车后需要进行解锁,这时候可以使用QoS level 1质量消息,手机App不断的发送解锁消息给单车锁,确保有一次消息能达到以解锁单车。最后用户用完单车后,需要提交付款表单,可以使用QoS level 2质量消息,这样确保只传递一次数据,否则用户就会多付钱了。

MQTT的消息类型(Message Type)

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

异步发布/订阅实现

发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。
这个模式有以下好处:
发布者与订阅者只需要知道同一个消息代理即可
发布者和订阅者不需要直接交互
发布者和订阅者不需要同时在线

JSON
JSON中文全称是JavaScript对象标记语言,在这门语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。其语法规则是:

对象表示为键值对;
数据由逗号分隔;
花括号保存对象;
方括号保存数组。

JSON层次结构简洁清晰,易于阅读和编写,同时也易于机器解析和生成,有效提升网络传输效率。

               
原文链接:https://blog.csdn.net/m0_57396609/article/details/119914301




收藏
收藏0
分享
分享
分享
淘帖0
支持
支持0
反对
反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册     

本版积分规则

关注0

粉丝0

帖子93

发布主题
关注我们
自动化监测技术交流

客服电话:010-62978778

客服邮箱:support@anxinjoy.com

周一至周五 8:30-17:30

地址:北京海淀区金隅嘉华大厦c座1005

Powered by Discuz! X3.2@ 2001-2013 Comsenz Inc. 京ICP备16000992号-2 京公网安备 11010802022300号