物联网 MQTT 协议

news2024/9/28 11:25:24

MQTT官网:MQTT - The Standard for IoT Messaging

MQTT中文网(全是广告):首页 | MQTT中文网

物联网百科

物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。

设备与网络的连接必须要解决的问题:网络环境复杂的消息不可靠、设备内存和闪存容量小、处理器能力有限。mqtt 就是针对这些问题给出的解决方案

MQTT百科

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一个Client(订阅)与Server(发布) 之间的消息传输协议。旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT协议设计规范

  • 1. 精简,不添加可有可无的功能
  • 2. 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递,解耦Client/Server模式,好处在于不必预先知道对方的存在(ip/port),不必同时运行
  • 3. 允许用户动态创建主题(不需要预先创建主题),零运维成本
  • 4. 把传输量降到最低,以提高传输效率
  • 5. 把低宽带、高延迟、不稳定的网络等因素考虑在内
  • 6. 支持连续的会话保持和控制(心跳)
  • 7. 理解客户端计算能力可能很低
  • 8. 提供服务质量(quality of service level:Qos)管理
  • 9. 不强求传输数据的类型与格式,保持灵活性(指应用层业务数据)

MQTT协议的主要特性

MQTT协议工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  • 1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
    • 这一点很类似于XMPP,但是MQTT的信息冗余远小于XMPP,,因为XMPP使用XML格式文本来传递数据。
  • 2. 对负载内容屏蔽的消息传输。
  • 3. 使用TCP/IP提供网络连接。
    • 主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
  • 4. 有三种消息发布服务质量:
    • "至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
    • "至少一次",确保消息到达,但消息重复可能会发生。
    • "只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
  • 5. 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
    • 这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。
  • 6. 使用Last Will和Testament特性通知有关各方客户端异常中断的机制。
    • Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
    • Testament:遗嘱机制,功能类似于Last Will。

MQTT协议原理

MQTT协议实现方式

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

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

  • 1. Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)
  • 2. payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

网络传输与应用消息

  • MQTT会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。
  • 当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连。

MQTT客户端

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

  • 1. 发布其他客户端可能会订阅的信息;
  • 2. 订阅其它客户端发布的消息;
  • 3. 退订或删除应用程序的消息;
  • 4. 断开与服务器连接。

MQTT服务器

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

  • 1. 接受来自客户的网络连接;
  • 2. 接受客户发布的应用信息;
  • 3. 处理来自客户端的订阅和退订请求;
  • 4. 向订阅的客户转发应用程序消息。

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

  • 订阅(Subscription)

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

  • 会话(Session)

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

  • 主题名(Topic Name)

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

  • 主题筛选器(Topic Filter)

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

  • 负载(Payload)

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

MQTT是基于发布(Publish)/订阅(Subscribe)模式来进行通信以及数据交换的,与HTTP的请求(Request)/应答(Response)模式有本质的不同。

订阅者(Subscribe)会向消息服务器(Broker)订阅一个主题(Topic),成功订阅后,消息服务器会将该主题中的消息转发给所有的订阅者。

主题(Topic)以 '/' 斜杠为分隔符区分不同的层级。包含通配符 '+'  加号 或 '#' 井号的主题又称为主题过滤器(Topic Filter),不包含通配符的称为主题名(Topic Name)

+:加号,通配一个层级的任意字符,

a/+,匹配 a/x,a/y 等

#:井号,通配一个或多个层级的任意字符,#通配符要出现在主题名末尾

a/b/#,匹配 a/b/c/d,a/b/x 等

注意:发布的时候主题名上不能带通配符,必须指定一个具体的主题发布,订阅的时候可以使用通配符,表示符合通配符的主题我都订阅。

MQTT协议中的方法

MQTT协议中定义了一些方法(也被称为动作),来于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:

  • 1. Connect:客户端连接到服务器。
  • 2. Connack:客户端连接上服务器的确认消息。
  • 3. Publish:客户端发布消息到服务器。服务器发布给订阅者。
  • 4. Puback:发布消息的确认。
  • 5. Pubrec:发布的消息已接收。
  • 6. Pubrel:发布的消息已释放。
  • 7. Pubcomp:发布完成。
  • 8. Subscribe:客户端向服务端发起订阅请求。
  • 9. Suback:订阅确认。
  • 10. Unsubscribe:取消订阅。
  • 11. Unsuback:取消订阅确认。
  • 12. Pingreq:客户端发送心跳。
  • 13. PingResp:服务端心跳响应。
  • 14. Disconnect:断开连接。
  • 15. Auth:认证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线编程教学技术解决方案,覆盖所有授课场景需求

在线编程教学是一种应用较为广泛的远程教学形式,例如:互动体验,音视频技术的普及,对线上教学的质量与学习效率带来了很大的提升。在线编程教学可以让教师对学生进行在线编程教学,以一对多小班教学为主。那么在线编程教…

线上项目源码安全性处理方案

场景: 最近项目提出要对线上代码进行安全性处理,防止客户直接通过反编译工具将代码反编译出来 方案: 第一种方案使用的是代码混淆 第二种方案使用的是代码加密 方案比较 方案一:采用的proguard-maven-plugin插件 方案二&#xf…

要花多少亿美元,HPE才能买下超融合鼻祖Nu­t­a­n­ix?

【全球存储观察 | 热点关注】据报道,慧与科技HPE在近几个月与超融合提供商Nutanix就收购进行了谈判。 在这之前的2017年2月,HPE以6.5亿美元收购了超融合全球老二SimpliVity,后来整合成了HPE重要的超融合产品线,并进一步丰富了整体…

Seal库官方示例(五):ckks_basics.cpp解析

这个代码计算的是πx30.4x1\pi \times x^30.4 \times x 1πx30.4x1。 代码解析 方案选择 首先照例是方案选择 EncryptionParameters parms(scheme_type::ckks);参数设置 CKKS方案中使用rescale方法来控制膨胀的密文规模和噪声,这个和modulus switching有点类似…

[激光原理与应用-28]:《激光原理与技术》-14- 激光产生技术 - 激光的主要参数与指标

目录 1、 激光器的门限电流与功率输出 2、激光器的调制增益 3、功率/能量密度 6、额定功耗 7、转换效率 8、光斑大小 9、线宽 10、激光器的谱线宽度。 11、激光器的相对强度噪声RIN。 12、激光器的线性范围。 13、带内平坦度 14、激光器的温度特性 15、激光器的交…

基于PHP+MySQL信息技术学习网站设计与实现

智多在线网络学习平台为学习各种技术查看资料的用户提供一个准确、最新的技术与相关文档,浏览目前流行教学的新闻,提出技术上遇到的难点及问题,帮助其他用户回答所提出的问题,上传想要分享的资源,下载要获取的相关技术…

Spirng MVC——获取参数详解

文章目录1. 什么是 Spirng MVC1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系2. 创建Spring MVC 项目3. Spring MVC 学习目标3.1 实现用户和程序的映射方法1:RequestMapping("/xxx")方法2:使用 POSTMapping("/xxx")方法3:使用…

Kali生成windows木马程序

目录 一、生成windows执行木马程序 二、进入msfconsole进行监听目标上线 三、目标运行木马和后渗透 四、问题 Meterpreter session 2 closed. Reason: Died 一、生成windows执行木马程序 -p windows/x64/meterpreter/reverse_tcp //载入64位payload攻击载荷&#xff0c…

RabbitMQ-惰性队列

文章目录1 消息堆积问题2 惰性队列2.1 基于命令行设置lazy-queue2.2 基于Bean声明LazyQueue(推荐)2.3 基于RabbitListener声明LazyQueue3 总结3.1 消息堆积问题的解决方案?3.2 惰性队列的优点有哪些?3.3 惰性队列的缺点有哪些?1 消息堆积问题…

BSA-maltose 牛血清白蛋白修饰麦芽糖 BSA-麦芽糖

产品名称:牛血清白蛋白修饰麦芽糖 英文名称:BSA-maltose 用途:科研 状态:固体/粉末/溶液 产品规格:1g/5g/10g 保存:冷藏 储藏条件:-20℃ 储存时间:1年 牛血清中的简单蛋白&#xff…

JAVA数据类型与变量

JAVA初阶 背景了解 Java语言之父—>高斯林。现代计算机之父—>冯诺依曼。 Java当中的main方法。 .java ->编译javac xxx.java -> xxx.class[字节码文件:二进制文件]。java命令 运行java程序 public class HelloWorld {//m main psvm 出现之后回车即可…

Qt第二十七章:QWidget、QMainWindow自定义标题栏并自由移动缩放

前提:UI必須采用自适应布局。 自定义组件【直接CV】custom_components.py from PySide6 import QtGui, QtWidgets, QtCore from PySide6.QtCore import Qt, QSize, QRect from PySide6.QtWidgets import QPushButton, QLabel, QWidgetclass QCustomTitleBar:def _…

基于SpringBoot vue的茶叶商城平台源码和论文含支付宝沙箱支付

此项目是前后端分离的 后台项目:shop 前端项目:Vue-shop 后端项目启动步骤: 1.先把sql导入数据库 2.把后台项目导入编辑器 3.修改数据库配置 4.启动项目 前端项目启动步骤: 1.打开Vue-shop目录,在这个文件夹里面加入cmd目录窗口 2.运行启动vue项目目录(需先安装nodejs软件)…

四、伊森商城 前端基础-Vue 双向绑定事件处理安装插件 p22

1、双向绑定 双向绑定: 效果:我们修改表单项,num 会发生变化。我们修改 num,表单项也会发生变化。为了实 时观察到这个变化,我们将 num 输出到页面。 我们不需要关注他们为什么会建立起来关联,以及页面如何…

Java面向对象三大特性:继承、封装、多态

java封装、继承、多态笔记 1.包 1.包的命名规则 (1)只能包含数字、字母、下划线、小圆点. (2)不能用数字开头, (3)不能是关键字或保留字 例如: demo.class.exec1 //错误class…

Redis学习笔记(三)

Jedis java语言连接redis工具准备工作 下载地址&#xff1a;https://mvnrepository.com/artifact/redis.clients/jedis基于maven <dependency> <groupId> redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</versi…

【面试题】面试官:你能自己实现一个async await吗?

开启掘金成长之旅&#xff01;这是我参与「掘金日新计划 12 月更文挑战」的第3天(点击查看活动详情) 相信大家对于Promise都不再陌生了&#xff0c;简易版的Promise对象源码我们也手撕过一次了&#xff0c;那接下来我们聊聊Promise的语法糖async-await&#xff0c;那让我们从…

【JavaWeb】第六章 xml

文章目录1、XML简介2、xml语法3、xml解析4、Dom4j类库的使用5、dom4j解析xml1、XML简介 xml是可扩展的标记性语言&#xff0c;xml的主要作用有&#xff1a; 用来保存数据&#xff0c;而且这些数据具有自我描述性 做为项目或者模块的配置文件做为网络传输数据的格式&#xff0…

QML 如何显示文本?Text可以有多少功能?

目录1.如何显示文本&#xff1f;2. Text有哪些主要功能&#xff1f;2.1 基本属性示例2.2 字重属性2.3 字体样式2.4 字体上标下标支持2.5 富文本2.6 文字换行 缩略1.如何显示文本&#xff1f; Text {font.pixelSize: 20; text: "这是20普通文字"} //一行即可以上代码…

12.2排序

目录 0.做题的失误 1.引用传值和传址 1.斐波那契数列 一.快速排序 1.挖坑法 2.优化 2.1 随机取数法 2.2 三数取中法 2.3把基准值相同的值移到基准旁边 2.4引用直接插入排序 3.Hoare 法: 4.非递归法 5.总结 二,归并排序 1.原理 2.代码实现 3.分析 4.非递归 5…