MQTT_介绍_1.1

历史

  • 1999年:MQTT最初由IBM的Andy Stanford-Clark和Cirrus Link的Arlen Nipper开发,用于满足石油和天然气公司在远程地区监控设备的需求。

  • 2006年:IBM发布了MQTT的最初开源实现,但此时MQTT并未获得广泛的关注。

  • 2010年:随着物联网(IoT)的兴起,MQTT开始被更广泛地采用,并逐渐有了更多的开源实现。

  • 2011年:Eclipse基金会启动了Eclipse Paho项目,提供了一系列开源的MQTT客户端库,支持多种编程语言。

  • 2012年:Eclipse基金会启动了Eclipse Mosquitto项目,提供了一个开源的MQTT代理(broker)实现。

  • 2014年:MQTT成为OASIS标准,这标志着它的发展进入了一个新的阶段,并进一步推动了开源社区对MQTT协议的兴趣和参与。

  • 2016年:MQTT 3.1.1版本被正式批准为OASIS标准,这是MQTT的第一个正式标准版本。

  • 2019年:MQTT 5.0版本发布,提供了许多新特性,包括更好的错误处理、共享订阅、消息属性和增强的安全性。开源社区迅速跟进,更新了各种开源实现以支持新版本。

  • 至今:MQTT的开源实现继续发展,如Eclipse Paho和Mosquitto等项目,这些项目的成功和普及直接促进了MQTT协议的广泛应用和发展。同时,其他开源项目如HiveMQ、VerneMQ等也提供了不同的功能和服务,丰富了MQTT的开源生态系统。

特点

 

  1. 轻量级:MQTT设计简洁,消息头很小,可以最小化网络带宽的使用,适合在资源受限的环境中运行,如物联网设备。

  2. 发布/订阅模式:MQTT使用发布/订阅消息模式,允许一个消息被发送到一个主题(topic),并且所有订阅了该主题的客户端都会收到这个消息。这种模式解耦了发布者和订阅者,提高了系统的可扩展性和灵活性。

  3. 服务质量(QoS)级别:MQTT支持三种不同的服务质量级别,以适应不同的网络环境和应用需求:

    • QoS 0:最多一次交付。消息可能会丢失,但不会重复。
    • QoS 1:至少一次交付。消息不会丢失,但可能会重复。
    • QoS 2:确保一次交付。消息不会丢失也不会重复。
  4. 持久会话:MQTT支持持久会话,客户端可以指示代理(broker)存储其订阅信息和未确认的消息,即使客户端断开连接后重新连接,也能恢复会话状态。

  5. 遗嘱消息(Last Will and Testament):客户端在连接到代理时可以指定一个遗嘱消息,如果客户端非正常断开连接,代理会将这个遗嘱消息发布到指定的主题。

  6. 小型传输优化:MQTT协议优化了小型传输,适合在带宽有限和不稳定的网络环境中使用,如移动通信网络或卫星链路。

  7. 安全性MQTT支持多种安全性选项,包括使用TLS(Transport Layer Security)加密传输,以确保数据的安全和隐私。

  8. 跨平台兼容性MQTT可以在多种平台上运行,包括嵌入式系统、服务器、移动设备等,支持多种编程语言。

  9. 易于使用和集成:MQTT的简单性和灵活性使其易于集成到现有的系统和应用程序中,同时也便于开发者快速上手和使用。

  10. 社区支持和开源实现:MQTT有广泛的社区支持,并且有多种开源实现,如Eclipse Paho和Mosquitto,这些实现提供了客户端和代理的代码,可以自由使用和修改。

  11. 适应性强:MQTT协议可以适应各种网络环境和应用场景,包括物联网、移动应用、智能家居、工业自动化等。

  12. 可扩展性:MQTT协议设计允许通过添加新的功能和服务来扩展协议,以适应未来的需求和发展

 MQTT 5.0   与    3.1.1的区别

MQTT 5.0是MQTT协议的第四个正式版本,它在2019年发布,提供了许多新特性和改进,与之前的3.1.1版本相比,MQTT 5.0在性能、功能和安全方面都有显著的提升。以下是MQTT 5.0与3.1.1版本之间的一些主要区别:

 

  1. 增强的认证和授权:MQTT 5.0提供了更灵活的认证和授权机制,支持多种认证方法。

  2. 消息和主题属性:MQTT 5.0增加了对消息和主题属性的支持,允许在发布消息时附加额外的元数据。

  3. 共享订阅:MQTT 5.0允许客户端通过共享订阅的方式来订阅主题,以提高系统的可扩展性和性能。

  4. 响应信息:MQTT 5.0支持响应信息,允许客户端在发布消息时请求一个响应。

  5. 改进的会话管理:MQTT 5.0提供了更精细的会话管理控制,包括会话过期的设置和会话终结的原因。

  6. 增强的错误报告:MQTT 5.0增加了更多的错误代码和原因字符串,使得错误报告更加详细和有用。

  7. 消息重传:MQTT 5.0在QoS 1和QoS 2中引入了消息重传机制,以提高消息的可靠传输。

  8. 流量控制:MQTT 5.0提供了流量控制功能,以避免过载。

  9. 用户属性:MQTT 5.0允许在连接、发布、订阅等操作中添加用户属性,以提供额外的上下文信息。

  10. 更好的性能和可扩展性:MQTT 5.0在设计上考虑了更好的性能和可扩展性,以适应未来的需求和发展。

  11. 兼容性:虽然MQTT 5.0引入了许多新特性,但它仍然保持了与3.1.1版本的兼容性。

 

 MQTT 常用的服务器

 

MQTT服务器(也称为MQTT代理或MQTT broker)是MQTT(Message Queuing Telemetry Transport)协议中的核心组件,负责接收客户端的连接请求、处理客户端的订阅和发布消息请求,并将消息路由到相应的订阅者。以下是几种常用的MQTT服务器:

 

  1. Eclipse Mosquitto:这是一个开源的MQTT服务器,由Eclipse基金会维护。它支持MQTT 3.1、3.1.1和5.0版本,具有高度的可扩展性和可靠性,适用于各种规模的部署。

  2. HiveMQ:这是一个商业化的MQTT服务器,提供企业级的功能和性能。HiveMQ支持MQTT 3.1、3.1.1和5.0版本,并且提供了丰富的插件和扩展功能。

  3. IBM MQTT Server:这是IBM提供的一个MQTT服务器,支持MQTT 3.1和3.1.1版本。它提供了高可用性和安全性,并且可以与其他IBM产品集成。

  4. VerneMQ:这是一个由Erlang社区开发的MQTT服务器,支持MQTT 3.1、3.1.1和5.0版本。它具有高可用性和可扩展性,并且支持多种认证和授权机制。

  5. EMQX:这是一个由EMQ公司开发的MQTT服务器,支持MQTT 3.1、3.1.1和5.0版本。它提供了丰富的插件和扩展功能,以及高可用性和安全性。//有大量的中文资料并且开源

 官网

Eclipse Mosquitto™ 开源 MQTT 代理

EMQX官网 

 

 MQTT 发布/订阅模式介绍

发布者(Publisher)//发信息

  • 发布消息:发布者是发送消息的客户端,它将消息发布到一个特定的主题(Topic)。
  • QoS级别:发布者可以选择不同的服务质量级别(QoS Levels),以控制消息的可靠传输:
    • QoS 0:最多一次(At Most Once) - 消息可能会丢失,但不会重复发送。
    • QoS 1:至少一次(At Least Once) - 消息不会丢失,但可能会重复发送。
    • QoS 2:精确一次(Exactly Once) - 消息不会丢失也不会重复发送。

订阅者(Subscriber)//接收信息

  • 订阅主题:订阅者是接收消息的客户端,它可以订阅一个或多个主题。
  • 接收消息:订阅者会接收所有发布到其订阅主题的消息。
  • QoS级别:订阅者也可以指定它希望接收消息的QoS级别。

代理(Broker)//服务器

  • 消息路由:代理是MQTT的核心组件,负责接收发布者的消息,并将消息路由到订阅该主题的订阅者。
  • 持久会话:代理可以存储订阅者和发布者的会话信息,以便在网络断开后重新连接时恢复会话状态。

遗嘱消息(Last Will and Testament)

  • 发布遗嘱:当客户端断开连接时,如果配置了遗嘱消息,代理会发布一个消息到指定的主题,通知其他客户端该客户端已经断开。

 主题(Topic)

  • 主题是 MQTT 进行消息路由的基础,它类似 URL 路径,使用斜杠 / 进行分层,比如 sensor/1/temperature。一个主题可以有多个订阅者,代理会将该主题下的消息转发给所有订阅者;一个 主题也可以有多个发布者,代理将按照消息到达的顺序转发。

 

 

 

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

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

相关文章

三大平台直播视频下载保存方法

终于解决了视频号下载的问题,2024年5月15日亲测可用。 而且免费。 教程第二部分,有本地电脑无法下载的解决方案。 第一部分:使用教程(正常) 第1步:下载安装包 下载迅雷网盘搜索:大海福利合集…

【Python报错】Python安装模块时报错Fatal error in launcher

【Python报错】Python安装模块时报错Fatal error in launcher 最近需要用到python下载一个小工具,自信敲下回车键本想看到黑乎乎的终端上会出现快速跳跃的命令代码,没想到,报错了...... Fatal error in launcher: Unable to create process …

【Qt】Qt开源项目

1、Flameshot 截图工具 1.1 简介 Flameshot是一款功能强大但易于使用的屏幕截图软件,中文名称火焰截图。 Flameshot 简单易用并有一个CLI版本,所以可以从命令行来进行截图。 Flameshot 是一个Linux发行版中完全免费且开源的截图工具 1.2 源码 github:https://github.com…

智能监控与安全管理:安全帽检测算法的实践与应用

在工地、煤矿等高危工作环境中,安全帽的佩戴至关重要。安全帽能够有效防止因坠落物体或碰撞等引起的头部伤害,从而保护工作人员的生命安全。然而,传统的检查人员佩戴安全帽的方式主要依赖于现场监督和巡查,这种方法不仅耗费大量人…

不用投稿邮箱,怎样向各大新闻媒体投稿?

身为单位的信息宣传员,我深知肩上责任重大。每个月,完成单位在媒体上投稿发表文章的考核任务,就如同一场无声的赛跑,既要保证速度,更要注重质量。起初,我遵循“前辈们”的老路,一头扎进了邮箱投稿的海洋。但很快,现实给了我一记重拳——邮箱投稿的竞争犹如千军万马过独木桥,稿件…

Hadoop3:客户端向HDFS写数据流的流程讲解(较枯燥)

一、场景描述 我们登陆HDFS的web端,上传一个大文件。 二、流程图 三、讲解 流程1(Client与NameNode交互) 1、HDFS client创建DistributedFileSystem,通过dfs与NameNode进行2次(一来一回4次)对话&#x…

x264 帧类型代价计算原理:slicetype_mb_cost 函数分析

slicetype_mb_cost 函数 函数功能 计算每个宏块 MB 的代价 cost。函数参数分析 x264_t *h:全局编码结构体x264_mb_analysis_t *a:宏块分析结构体x264_frame_t **frames:系列帧数据结构体int p0:帧序号之一,一般指向靠前帧int p1:帧序号之一,一般指向靠后帧int b:帧标志…

Go微服务开源框架kratos的依赖注入关系总结

该文章为学习开源微服务框架kratos的学习笔记!官方文档见:简介 | Kratos Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具。 一、Kratos 项目结构简介 通过 Kratos 工具生成的 Go工程化项目模板如下: applicati…

【半夜学习MySQL】复合查询(含多表查询、自连接、单行/多行子查询、多列子查询、合并查询等详解)

🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。 🎯每天努力一点点,技术变化看得见 文章目录 回顾基本查询多表查询自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询合并查询 回顾基本查询 下面使用…

计算机网络 -- 序列化与反序列化

一 协议的重要性 我们都知道,在进行网络通信的过程中,通信的双方可以是不同的设备,不同的平台,不同的平台,比如说,手机用户和电脑用户进行通信,ios系统和安卓系统进行通信。 自己的数据&#xf…

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等)

抖店商品详情API接口(店铺|标题|主图|价格|SKU属性等) 抖店商品详情API接口是指通过调用抖音开放平台提供的接口,获取抖店上商品的详细信息的方法。 抖店开放平台提供了一系列的接口,可以用于获取商品的基本信息、价格、库存、销量、评价等各种信息。以…

UIKit之图片浏览器

功能需求 实现一个图片浏览器,点击左右按钮可以切换背景图,且更新背景图对应的索引页和图片描述内容。 分析: 实现一个UIView的子类即可,该子类包含多个按钮。 实现步骤: 使用OC语言,故创建cocoa Touch类…

数据库的存储过程、函数与触发器

使用下面的场景来引入 1.创建表 CREATE DATABASE staff; USE staff; CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(2…

开源连锁收银系统哪个好

针对开源连锁收银系统的选择,商淘云是一个备受关注的候选。商淘云以其功能丰富、易于定制和稳定性等优势,吸引了众多企业和开发者的关注。下面将从四个方面探讨商淘云开源连锁收银系统的优势: 首先,商淘云提供了丰富的功能模块。作…

如何查看SNMP设备的OID

什么是OID和MIB OID OID 代表对象标识符。 OID 唯一地标识 MIB 层次结构中的托管对象。 这可以被描述为一棵树,其级别由不同的组织分配。MIB MIB(管理信息基)提供数字化OID到可读文本的映射。 使用MIB Browser扫描OID 我的设备是一台UPS SN…

【Uniapp小程序】onShareAppMessage异步处理请求完后再分享

分享按钮 <button type"primary" open-type"share">保存并分享 </button>修改onShareAppMessage saveImage为promise方法 async onShareAppMessage() {const saveRes await saveImage();if (saveRes.code 200) {return {title: "tit…

每日两题 / 236. 二叉树的最近公共祖先 124. 二叉树中的最大路径和(LeetCode热题100)

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; dfs统计根节点到p&#xff0c;q节点的路径&#xff0c;两条路径中最后一个相同节点就是公共祖先 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

windows部署腾讯tmagic-editor02-Runtime

创建editor项目 将上一教程中的hello-world复制过来&#xff0c;改名hello-editor 创建runtime项目 和hello-editor同级 pnpm create vite删除src/components/HelloWorld.vue 按钮需要用的ts types依赖 pnpm add tmagic/schema tmagic/stage实现runtime 将hello-editor中…

【C语言】5.C语言函数(2)

文章目录 7.嵌套调⽤和链式访问7.1 嵌套调⽤7.2 链式访问 8.函数的声明和定义8.1 单个⽂件8.2 多个⽂件8.3 static 和 extern8.3.1 static 修饰局部变量8.3.2 static 修饰全局变量8.3.3 static 修饰函数 7.嵌套调⽤和链式访问 7.1 嵌套调⽤ 嵌套调用就是函数之间的互相调用。…

Docker安装Mosquitto

在物联网项目中&#xff0c;我们经常用到MQTT协议&#xff0c;用MQTT协议做交互就需要部署一个MQTT服务&#xff0c;而mosquitto是一个常用的MQTT应用服务&#xff0c; Mosquitto是一个实现了消息推送协议MQTT v3.1的开源消息代理软件。MQTT&#xff08;Message Queuing Teleme…