揭秘MQTT:为何它是物联网的首选协议?

文章目录

    • MQTT 协议简介
      • 概览
      • MQTT 与其他协议对比
        • MQTT vs HTTP
        • MQTT vs XMPP
    • 为什么 MQTT 是适用于物联网的最佳协议?
      • 轻量高效,节省带宽
      • 可靠的消息传递
      • 海量连接支持
      • 安全的双向通信
      • 在线状态感知
    • MQTT 5.0 与 3.1.1
    • MQTT 服务器
    • MQTT 客户端

在这里插入图片描述

MQTT 协议简介

概览

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。

MQTT 协议由 Andy Stanford-Clark (IBM)和 Arlen NipperArcom,现为 Cirrus Link)于 1999 年发布。 按照 Nipper 的介绍,MQTT 必须具备以下几点:

  • 简单容易实现
  • 支持 QoS(设备网络环境复杂)
  • 轻量且省带宽(因为那时候带宽很贵)
  • 数据无关(不关心 Payload 数据格式)
  • 有持续地会话感知能力(时刻知道设备是否在线)

Arlen NipperIBM Podcast 上的自述,MQTT 原名是 MQ TT,注意 MQ 与 TT之间的空格,其全称为: MQ Telemetry Transport,是九十年代早期他在参与 Conoco Phillips 公司的一个原油管道数据采集监控系统(pipeline SCADA system)时开发的一个实时数据传输协议。它的目的在于让传感器通过带宽有限的 VSAT ,与 IBM 的 MQ Integrator 通信。由于 Nipper 是遥感和数据采集监控专业出身,所以按业内惯例取了 MQ TT 这个名字。

MQTT 与其他协议对比

MQTT vs HTTP
  • MQTT 的最小报文仅为 2 个字节,比 HTTP 占用更少的网络开销。
  • MQTT 与 HTTP 都能使用 TCP 连接,并实现稳定、可靠的网络连接。
  • MQTT 基于发布订阅模型,HTTP 基于请求响应,因此 MQTT 支持双工通信。
  • MQTT 可实时推送消息,但 HTTP 需要通过轮询获取数据更新。
  • MQTT 是有状态的,但是 HTTP 是无状态的。
  • MQTT 可从连接异常断开中恢复,HTTP 无法实现此目标。
MQTT vs XMPP

MQTT 协议设计简单轻量、路由灵活,将在移动互联网、物联网消息领域,全面取代 PC 时代的 XMPP 协议。

  • MQTT 报文体积小且编解码容易,XMPP 基于繁重的 XML,报文体积大且交互繁琐。
  • MQTT 基于发布订阅模式,相比 XMPP 基于 JID 的点对点消息路由更为灵活。
  • MQTT 支持 JSON、二进制等不同类型报文。XMPP 采用 XML 承载报文,二进制必须 Base64 编码等处理。
  • MQTT 通过 QoS 保证消息可靠传输,XMPP 主协议并未定义类似机制。

为什么 MQTT 是适用于物联网的最佳协议?

据 IoT Analytics 最新发布的《2022 年春季物联网状况》研究报告显示,到 2022 年,物联网市场预计将增长 18%,达到 144 亿活跃连接。

在如此大规模的物联网需求下,海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了巨大的挑战。对于物联网协议来说,必须针对性地解决物联网设备通信的几个关键问题:网络环境复杂而不可靠、内存和闪存容量小、处理器能力有限

MQTT 协议正是为了应对以上问题而创建,经过多年的发展凭借其轻量高效、可靠的消息传递、海量连接支持、安全的双向通信等优点已成为物联网行业的首选协议。

在这里插入图片描述

轻量高效,节省带宽

MQTT 将协议本身占用的额外消耗最小化,消息头部最小只需要占用 2 个字节,可稳定运行在带宽受限的网络环境下。同时,MQTT 客户端只需占用非常小的硬件资源,能运行在各种资源受限的边缘端设备上。

可靠的消息传递

MQTT 协议提供了 3 种消息服务质量等级(Quality of Service),保证了在不同的网络环境下消息传递的可靠性。

  • QoS 0:消息最多传递一次。
    如果当时客户端不可用,则会丢失该消息。发布者发送一条消息之后,就不再关心它有没有发送到对方,也不设置任何重发机制。

  • QoS 1:消息传递至少 1 次。
    包含了简单的重发机制,发布者发送消息之后等待接收者的 ACK,如果没收到 ACK 则重新发送消息。这种模式能保证消息至少能到达一次,但无法保证消息重复。

  • QoS 2:消息仅传送一次。
    设计了重发和重复消息发现机制,保证消息到达对方并且严格只到达一次。

除了 QoS 之外,MQTT 还提供了清除会话(Clean Session)机制。对于那些想要在重新连接后,收到离线期间错过的消息的客户端,可在连接时设置关闭清除会话,此时服务端将会为客户端存储订阅关系及离线消息,并在客户端再次上线后发送给客户端。

海量连接支持

MQTT 协议从诞生之时便考虑到了日益增长的海量物联网设备,得益于其优秀的设计,基于 MQTT 的物联网应用及服务可轻松具备高并发、高吞吐、高可扩展能力。

连接海量的物联网设备,离不开 MQTT 服务器的支持。目前,MQTT 服务器中支持并发连接数最多的是 EMQX。最近发布的 EMQX 5.0 通过一个 23 节点的集群达成了 **1 亿 MQTT 连接+**每秒 100 万消息吞吐,这使得 EMQX 5.0 成为目前为止全球最具扩展性的 MQTT 服务器。

安全的双向通信

依赖于发布订阅模式,MQTT 允许在设备和云之间进行双向消息通信。发布订阅模式的优点在于:发布者与订阅者不需要建立直接连接,也不需要同时在线,而是由消息服务器负责所有消息的路由和分发工作。

安全性是所有物联网应用的基石,MQTT 支持通过 TLS/SSL 确保安全的双向通信,同时 MQTT 协议中提供的客户端 ID、用户名和密码允许我们实现应用层的身份验证和授权。

在线状态感知

为了应对网络不稳定的情况,MQTT 提供了**心跳保活(Keep Alive)**机制。在客户端与服务端长时间无消息交互的情况下,Keep Alive 保持连接不被断开,若一旦断开,客户端可即时感知并立即重连。

同时,MQTT 设计了遗愿(Last Will) 消息,让服务端在发现客户端异常下线的情况下,帮助客户端发布一条遗愿消息到指定的 MQTT 主题

另外,部分 MQTT 服务器如 EMQX 也提供了上下线事件通知功能,当后端服务订阅了特定主题后,即可收到所有客户端的上下线事件,这样有助于后端服务统一处理客户端的上下线事件。

MQTT 5.0 与 3.1.1

在 MQTT 3.1.1 发布并成为 OASIS 标准的四年后,MQTT 5.0 正式发布。这是一次重大的改进和升级,它的目的不仅仅是满足现阶段的行业需求,更是为行业未来的发展变化做了充足的准备。

MQTT 5.0 在 3.1.1 版本基础上增加了会话/消息延时、原因码、主题别名、用户属性、共享订阅等更加符合现代物联网应用需求的特性,提高了大型系统的性能、稳定性与可扩展性。目前,MQTT 5.0 已成为绝大多数物联网企业的首选协议,我们建议初次接触 MQTT 的开发者直接使用该版本。

MQTT 服务器

MQTT 服务器负责接收客户端发起的连接,并将客户端发送的消息转发到另外一些符合条件的客户端。一个成熟的 MQTT 服务器可支持海量的客户端连接及百万级的消息吞吐,帮助物联网业务提供商专注于业务功能并快速创建一个可靠的 MQTT 应用。

EMQX 是一款应用广泛的大规模分布式物联网 MQTT 服务器。自 2013 年在 GitHub 发布开源版本以来,目前全球下载量已超千万,累计连接物联网关键设备超过 1 亿台。

感兴趣的可通过如下 Docker 命令安装 EMQX 5.0 开源版进行体验。

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

也可直接在 EMQX Cloud 上创建完全托管的 MQTT 服务。

MQTT 客户端

MQTT 应用通常需要基于 MQTT 客户端库来实现 MQTT 通信。目前,基本所有的编程语言都有成熟的开源 MQTT 客户端库,你可以参考 EMQ 整理的 MQTT 客户端库大全选择一个合适的客户端库来构建满足自身业务需求的 MQTT 客户端。

MQTT 应用开发还离不开 MQTT 测试工具的支持,一款易用且功能强大的 MQTT 测试工具可帮助开发者缩短开发周期,创建一个稳定的物联网应用。

MQTTX 是一款开源的跨平台桌面客户端,它简单易用且提供全面的 MQTT 5.0 功能、特性测试,可运行在macOS, Linux 和 Windows 上。同时,它还提供了命令行及浏览器版本,满足不同场景下的 MQTT 测试需求。感兴趣的可访问 MQTTX 官网进行下载试用。
在这里插入图片描述
以上就是今天的全部内容了,欢迎大家下载体验!

参考链接:https://www.emqx.com/zh/blog/what-is-the-mqtt-protocol#mqtt-%E5%8D%8F%E8%AE%AE%E7%AE%80%E4%BB%8B

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

acwing1209.带分数暴力与优化(java版)

//n a b / c n是确定的,只需找到其中两个。判断剩下一个数是否满足条件即可 //由题目条件可知,每个数不能重复使用,需要一个st全局数组判断每个数是否使用过 //递归实现排列型枚举,cn ac b //对于枚举出来的每一个a,再去枚举每一个c,再在c的枚举里判断b是否满足条件 //…

第四期丨酷雷曼无人机技能培训

第4期无人机技能培训 2023年10月25日,酷雷曼无人机技能培训及执照考试第四期成功举办,自7月份首期开办以来,已按照每月一期的惯例连续举办四期,取得了极为热烈的反响。 随着无人机培训的重要性及影响力逐渐扩大,参加培…

算法-贪心思想

贪心的思想非常不好解释,而且越使用权威的语言解释越难懂。而且做题的时候根据自己的理解可能直接做出来,但是非要解释一下怎么使用的贪心的话,就懵圈了。一般来说,贪心的题目没有固定的套路,一题一样,不过…

分享67个节日PPT,总有一款适合您

分享67个节日PPT,总有一款适合您 67个节日PPT下载链接:https://pan.baidu.com/s/1oU-UUCV_69e8Gp5Y6zrzVA?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…

Spark---Spark on Hive

1、Spark On Hive的配置 1&#xff09;、在Spark客户端配置Hive On Spark 在Spark客户端安装包下spark-2.3.1/conf中创建文件hive-site.xml&#xff1a; 配置hive的metastore路径 <configuration><property><name>hive.metastore.uris</name><v…

关于对ArrayBlockingQueue 的AQS探究

1、介绍 条件队列是 AQS 中最容易被忽视的一个细节。大部分时候&#xff0c;我们都用不上条件队列&#xff0c;但是这并不说明条件队列就没有用处了&#xff0c;它反而是我们学习生产者-消费者模式的最佳教材。条件队列是指一个阻塞队列&#xff0c;其中的元素是等待某个条件成…

每日一题:LeetCode-75. 颜色分类

每日一题系列&#xff08;day 12&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

ROS 元功能包

ROS元功能包&#xff08;Metapackage&#xff09;是一种特殊的软件包&#xff0c;它本身并不包含任何可执行代码或数据文件。在ROS 1中&#xff0c;可以通过catkin_create_pkg命令创建元功能包。 相反&#xff0c;它的主要目的是作为一组相关功能包的集合或者依赖关系列表。使…

蓝桥杯每日一题2023.12.5

题目描述 1.一步之遥 - 蓝桥云课 (lanqiao.cn) 题目分析 对于本题遵循多了就减少了就加的原则&#xff0c;用while进行计算即可 #include<bits/stdc.h> using namespace std; int x, ans; int main() {while(x ! 1){if(x < 1)x 97;else x - 127;ans ;}cout <&…

vue-cli创建项目运行报错this[kHandle] = new _Hash(algorithm, xofLen);(完美解决)

1&#xff1a;问题出现的原因 出现这个问题是node.js 的版本问题&#xff0c;因为 node.js V17开始版本中发布的是OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响。故此以前的项目在使用 nodejs V17以上版本后会报错。…

使用VBA快速统计词组(单词组合)词频

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重&#xff0c;进而实现单个单词的词频统计。 但是统计词组词频就没有那么简单了&#xff0c;为了便于演示&#xff0c;此处的词组只限于两个单词的组合。…

阿里云Arthas使用——在日志没有输出异常情况下,如何进行线上bug定位 stack命令 和 trace命令

前言 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

深入理解:指针变量的解引用 与 加法运算

前言 指针变量的解引用和加法运算是非常高频的考点&#xff0c;也是难点&#xff0c;因为对初学者的不友好&#xff0c;这就导致了各大考试都很喜欢在这里出题&#xff0c;通常会伴随着强制类型转换、二维数组、数组指针等一起考查大家对指针的理解。但是不要怕&#xff0c;也许…

托盘四向穿梭车自动化密集库供应|单机智能向系统智能跨越的HEGERLS托盘四向车系统

随着物流产业的迅猛发展&#xff0c;托盘四向穿梭式自动化密集仓储系统可认为是在穿梭车货架系统基础上提出的一种新仓储概念。托盘四向穿梭式立体库因其在流通仓储体系中所具有的高效密集存储功能优势、运作成本优势与系统化智能化管理优势&#xff0c;已发展为仓储物流的主流…

契约锁2023年伙伴大会连下58城,顺利收官!

10月以来&#xff0c;携手全国58城的IT伙伴&#xff0c;共同探讨电子签章海量市场下的发展机遇以及合作模式、交流分享电子签章海量市场机遇、体验电子签章产品在组织数字化建设中的应用价值。 以简单易用、方便实施的产品&#xff0c;和开放共享政策&#xff0c;广结伙伴、共建…

常用汇编指令集

寄存器 如上是OD展示的寄存器&#xff0c;逐条说明常用的寄存器和标志位含义&#xff1a; EIP&#xff1a;寄存器指向即将要执行的指令的地址&#xff08;EIP中的地址&#xff0c;就是下一步要执行指令的地址&#xff09; ESP&#xff1a;里面的内容永远指向堆栈的最顶端 EAX&…

浪涌保护器参数指南:浪涌保护器行业选型方案

浪涌保护器&#xff08;SPD&#xff09;是一种用于限制瞬态过电压和泄放浪涌电流的器件&#xff0c;可有效降低电子设备在雷击、电源故障等情况下受到的损害。其主要作用是当系统发生浪涌时&#xff0c;将过电压、过电流泄放到大地&#xff0c;从而保护设备和人身安全。然而浪涌…

微表情检测(一)----LGAttNet论文总结

LGAttNet: Automatic microexpression detection using dualstream local and global attentions Abstract 微表情识别之前需要先进行微表情的检测。我们提出了一种基于双重注意力网络的微表情检测架构&#xff0c;称为LGAttNet。LGAttNet是第一个利用与二维卷积神经网络组合的…

虚拟机-桥接模式连接

文章目录 1.查看宿主机再用的IP信息2.桥接模式-虚拟机设置VMware设置虚拟机设置重启网络服务 1.查看宿主机再用的IP信息 ipconfig /all 注&#xff1a; 在虚拟机中要设置同网段的ip设置同一个子网掩码设置同一个网关设置同一个DNS服务器 2.桥接模式-虚拟机设置 VMware设置 虚…

从零开始学习 JS APL(五):完整指南和实例解析

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习内容&#xff1a; Window对象&#xff1a; 定时器-延时函数&#xff1a; JS 执行机制&#xff1a; location对象&#xff1a; 本地存储&#xff1a; 本地存储分类- localStorage&#xff1a…