一种轻量级的消息传输协议-MQTT

news2024/10/6 16:19:52

1ec31c2ee70fca19dec04513ecf27bda.gif

正文

大家周末好,我是bug菌~

最近项目中用到了MQTT,感觉挺优秀的一种协议,所以这里分享一些相关的知识。

1

什么是MQTT

MQTT是一种轻量级的消息传输协议,用于物联网设备和应用程序之间的通信。其最初由IBM开发,现在已成为开放的OASIS标准。

该协议基于发布/订阅模式(Publish/Subscribe Pattern),支持多种质量等级(Quality of Service,QoS),可以实现可靠的消息传输和传输后的可靠存储。

其主要特点如下:

1. 轻量级和低带宽:采用二进制编码和可变长度编码,使得消息头的大小尽可能小,能够在低带宽环境下进行高效的数据传输。

2. 灵活和可扩展:支持多种消息发布/订阅模式,能够灵活地适应不同的应用场景。同时,MQTT协议还支持多种质量等级,使得消息传输的可靠性和效率能够根据应用的需求进行调整。

3. 可靠性和安全性:支持消息的持久化和存储,能够保证消息的可靠传输和传输后的可靠存储。同时,还支持加密和认证等安全机制,能够保证消息的安全传输和处理。

4. 易于使用和实现:议规范简单明了,易于理解和实现。还提供了多种客户端库和开发工具,方便快速地使用和集成该协议。

2

MQTT开源库

1、paho-mqtt-c的开源的MQTT协议栈库,Paho MQTT 是 Eclipse 实现的基于 MQTT 协议的客户端。

2、uMQTT,uMQTT 软件包是 RT-Thread 自主研发的,基于 MQTT 3.1.1 协议的客户端实现。

3

MQTT协议的设计

MQTT的核心设计模式是发布/订阅模式(Publish/Subscribe Pattern),它是一种消息传递模式,用于解耦消息的发送者和接收者之间的关系。

2dbff6ed14f6c27ede36bf9c5d3579ac.jpeg

在MQTT中,发布/订阅模式的实现包括以下几个核心概念:

1. 主题(Topic):主题是MQTT中消息的标识符,用于指定消息的内容和接收者。主题由一个或多个主题等级(Topic Level)组成,主题等级之间用斜杠(/)分隔。

例如,topic/a/b/c就是一个由三个主题等级组成的主题。

2. 客户端(Client):MQTT中的客户端是指连接到MQTT代理服务器的设备或应用程序,它可以是发布者(Publisher)或订阅者(Subscriber)。

3. 代理服务器(Broker):MQTT中的代理服务器是指负责接收、路由和转发消息的中间件。代理服务器会维护一个或多个主题,客户端可以向代理服务器发布消息或订阅主题。

4. 发布者(Publisher):MQTT中的发布者是指发布消息的客户端。发布者将消息发送到代理服务器,代理服务器会根据消息的主题将其路由到订阅了相应主题的订阅者。

5. 订阅者(Subscriber):MQTT中的订阅者是指订阅主题的客户端。订阅者向代理服务器订阅特定的主题,代理服务器会将订阅者订阅的主题和相关信息保存在订阅列表中。当有新消息发布到订阅者订阅的主题时,代理服务器会将消息发送给订阅者。

在MQTT的发布/订阅模式中,发布者和订阅者之间是解耦的,它们不需要知道对方的存在和身份,只需要知道相应的主题即可。

这种设计模式使得MQTT具有高度的灵活性和扩展性,能够适应不同的应用场景和需求。同时,MQTT还支持多种质量等级,可以根据应用的需求选择不同的质量等级,以实现消息传输的可靠性和效率。

4

几种应用模式

MQTT支持多种消息发布/订阅模式,常见的应用模式如下:

1. 点对点模式(Point-to-Point):在点对点模式下,MQTT客户端直接连接到MQTT代理服务器,通过MQTT协议进行消息的传输。

这种模式适用于直接连接的物联网设备和应用程序之间的通信,如传感器和控制器之间的通信。

2. 发布/订阅模式(Publish/Subscribe):在发布/订阅模式下,MQTT客户端通过订阅主题(Topic)来接收感兴趣的消息,通过发布主题来发送消息。

这种模式适用于需要解耦消息发送者和接收者之间的关系的应用场景,如物联网中的实时数据传输、远程控制和状态监测等。

3. 请求/响应模式(Request/Response):在请求/响应模式下,MQTT客户端通过请求主题(Request Topic)向MQTT代理服务器发送请求消息,MQTT代理服务器将请求消息路由到相应的处理程序,并返回响应消息。

这种模式适用于需要请求和响应交互的应用场景,如物联网中的远程管理和控制等。

4. 点对多模式(Point-to-Multipoint):在点对多模式下,一个MQTT客户端可以同时连接到多个MQTT代理服务器,通过MQTT协议进行消息的传输。

这种模式适用于需要同时连接多个MQTT代理服务器的应用场景,如物联网中的分布式处理和数据存储等。

5

简单应用

下面以一个物联网温度监测系统为例,来说明MQTT的发布/订阅模式:

假设物联网温度监测系统包括多个温度传感器和一个温度数据中心,其中每个温度传感器都能够实时采集温度数据并将其发布到指定的主题上,温度数据中心则订阅了多个主题,能够实时接收并处理温度数据。

这个过程可以通过以下步骤来实现:

1. 温度传感器连接到MQTT代理服务器,并发布温度数据到指定的主题上,例如topic/temperature。

2. 温度数据中心连接到MQTT代理服务器,并订阅温度数据的主题,例如topic/temperature。

3. 当温度传感器发布新的温度数据到主题topic/temperature时,MQTT代理服务器将会将这条消息路由到订阅了该主题的温度数据中心上。

4. 温度数据中心收到新的温度数据后,可以对数据进行处理和存储,例如计算平均温度、生成报表等等。

通过这种方式,MQTT的发布/订阅模式实现了温度传感器和温度数据中心之间的解耦,不需要知道对方的存在和身份,只需要知道相应的主题即可实现实时的数据传输和处理。

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

bug菌唯一、永久嵌入式技术知识平台~

85c87516e5f065d92a6f759cf5e64202.jpeg

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 efcc1f99339d3f4844f5a6d0fa9471cd.gif

☞  嵌入式C语言进阶专辑 888e8ed5172d261988d39379ccd0cb8a.gif

☞  “bug说”专辑 a0c6de832ac7f2f03bd1a73db1f14519.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

c0e5f24da356a16dc643ba9aab63f30e.gif

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

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

相关文章

TCP可靠数据传输

TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。 1 重传机制 TCP 利用重传机制解决数据包丢失的情况,常见的重传机制如下: 超时重传快速重传SACKD-SACK 1.1 超时重传 重传机制的其中一个方式,就是…

网络的七层模型

网络的七层模型 七层模型结构 OSI七层模型TCP/IP五层模型说明协议硬件解释应用层应用层网络服务与最终用户的一个接口HTTP HTTPS FTP TFTP SMTP POP3 IMAP TELNET SNMP DHCP这层不涉及硬件,主要是web应用的表形式为应用程序提供网络服务表示层数据的表示、安全、压…

[学习笔记] [机器学习] 6. [下]决策树算法(熵Entropy、信息增益(率)、基尼值(指数)、CART剪枝、特征工程特征提取、回归决策树)

7. 回归决策树 学习目标: 知道回归决策树的实现原理 前面已经讲到,关于数据类型,我们主要可以把其分为两类,①连续型数据和②离散型数据。 在面对不同数据时,决策树也可以分为两大类型: 分类决策树&…

第三篇:强化学习发展历史

你好,我是zhenguo(郭震) 这是强化学习第三篇,我们回顾一下它的发展历史:强化学习发展历史 强化学习作为一门研究领域,经历了多年的发展和演进。以下是强化学习的主要发展历史里程碑: 1950年代-1…

前沿重器[33] | 试了试简单的prompt

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

容器简单介绍

目录 一、容器简介​编辑 二、容器和虚拟化技术差异 三、容器基本概念 四、容器技术对企业优势 五、容器的工具 一、容器简介 docker只是容器工具,真正容器技术是LXC (linux container) 二、容器和虚拟化技术差异 虚拟机模式&#xff…

微服务开发系列 第二篇:Nacos

总概 A、技术栈 开发语言:Java 1.8数据库:MySQL、Redis、MongoDB、Elasticsearch微服务框架:Spring Cloud Alibaba微服务网关:Spring Cloud Gateway服务注册和配置中心:Nacos分布式事务:Seata链路追踪框架…

【腾讯云 Finops Crane 集训营】云架构成本大,浪费支出太高?何不试试Crane

一、前言 近年来,很多公司随着业务的发展都开始采用云原生的架构方式来部署服务系统,以便满足系统的弹性需求。但随着业务的进一步增长,k8s的节点数不断的增加,每个月消耗的费用也随之增加,导致了资源的利用率并不平均…

Python自动化办公对每个子文件夹的Excel表加个表头(Excel同名)

点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 玉容寂寞泪阑干,梨花一枝春带雨。 大家好,我是皮皮。 一、前言 前几天在Python粉丝【彩】问了一个Python自动化办公处理的问题&…

python整合合并两个excel文件,保留各自excel文件的样式,包含字体大小和字体颜色等格式

一、实现目标 现有两个excel文件data1.xlsx和data2.xlsx,要求将这两个excel文件合并为一个excel文件,同时保留这两个excel文件各自带有的样式,包括字体、颜色等格式需要保留。 data1.xlsx: …

装饰者设计模式解读

问题引进 星巴克咖啡订单项目(咖啡馆): 1) 咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 2) 调料:Milk、Soy(豆浆)、Chocolate 3) 要求在扩展新的咖啡种类时&#x…

Redis主从集群搭建及其原理

Redis主从集群搭建及其原理 1.Redis主从1.1.搭建主从架构1.2.准备实例和配置1.3.启动1.4.开启主从关系1.5.测试 2.主从数据同步原理2.1.全量同步2.2.增量同步2.3.repl_backlog原理 3.主从同步优化4.小结 1.Redis主从 1.1.搭建主从架构 单节点Redis的并发能力是有上限的&#…

车辆合格证怎么转为结构化excel数据?

一、为何要将车辆合格证转为结构化excel? 车辆合格证是在车辆制造完成后,经过各项检测合格的证明。对于车辆行业来说,车辆合格证是一种重要的合规证明,在车辆的生产制造、售后服务、质量管理等各个环节中都有着重要的作用。同时&…

【架构】常见技术点--监控告警

导读:收集常见架构技术点,作为项目经理了解这些知识点以及解决具体场景是很有必要的。技术要服务业务,技术跟业务具体结合才能发挥技术的价值。 目录 1. 服务监控 2. 全链路监控 2.1 服务拨测 2.2 节点探测 2.3 告警过滤 2.4 告警去重 …

内网 monorepo 配置指南(PNPM、YARN、Rush.js)

此处的内网是指没办法连接互联网进行依赖下载的环境,本文以windows平台为例 背景说明 绝大部分政府机关、国有企业都是在内网开发,无法从互联网同步依赖,就需要另辟蹊径解决项目依赖的问题。 传统的单包项目还好,从互联网机器将…

音视频技术开发周刊 | 294

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 五问「ChatGPT医学影像」:新一代的 AI 能否成为放射科医生的一把利器? 在医学等专业性较强的领域内,ChatGPT的表现还不够好&#xff0c…

Linux 防火墙 SNAT DNAT

SNAT原理与应用 SNAT 应用环境 局域网主机共享单个公网IP地址接入Internet (私有IP地址不能在Internet中正常路由) SNAT原理 修改数据包的源地址 SNAT可以认为是路由器NAT中的easy ip DNAT可以认为是路由器NAT中的 nat server SNAT将 内网源地址 转化为网…

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-Diff

1. 前言 在上一篇文章介绍VNode的时候我们说了,VNode最大的用途就是在数据变化前后生成真实DOM对应的虚拟DOM节点,然后就可以对比新旧两份VNode,找出差异所在,然后更新有差异的DOM节点,最终达到以最少操作真实DOM更新…

FasterRCNN训练自己的数据集

2016年提出的Faster RCNN目标检测模型是深度学习现代目标检测算法的开山之作,也是第一个真正全流程都是神经网络的目标检测模型。 其主要步骤如下: 1,使用CNN对输入图片提取feature map. 2,对feature map上的每个点设计一套不同大…

Roboflow的使用

文章目录 前言一、使用labelimg标注数据集二、导入roboflow1.注册roboflow账户2.导入图片2.1 创建工作区workspace(非必须)2.2 创建项目 project2.3 导入 3、导出图片4、同一个数据集可以导出不同类型 前言 我自己也是一个小白不是很会,如果…