【网络应用层协议】【MQTT】详解消息队列遥测传输协议MQTT(超详细)

目录

1. MQTT 协议简介

2. MQTT 的特点

3. MQTT 协议原理

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


1. MQTT 协议简介

        MQTT( Message Queuing Telemetry Transport,消息队列遥测传输协议 )是一种消息列队传输协议,采用订阅、发布机制,订阅者只接收自己已经订阅的数据,非订阅数据则不接收,既保证了必要的数据的交换,又避免了无效数据造成的储存与处理。

        它是一种基于发布/订阅( publish/subscribe )模式的 “ 轻量级 ” 通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

2. MQTT 的特点

        MQTT 协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

        MQTT 协议当前版本为,2014 年发布的 MQTT v3.1.1。除标准版外,还有一个简化版 MQTT-SN,该协议主要针对嵌入式设备,这些设备一般工作于 TCP/IP 网络,如:ZigBee。

        MQTT 协议运行在 TCP/IP 或其他网络协议,提供有序、无损、双向连接。其特点包括:


轻量级
        MQTT协议设计简单轻巧,数据包头部较小,使其在低带宽、高延迟的网络环境中运行效率高,可以对比HTTP协议,HTTP协议的数据报头较大,就算是不携带任何的数据,都有一定字节的大小,但是MQTT的报头只有一个字节。

发布-订阅模式
        MQTT采用发布者(Publisher)和订阅者(Subscriber)模式,发布者负责将消息发布到特定的主题(Topic),而订阅者可以选择订阅感兴趣的主题,接收与之相关的消息。这种模式使得设备之间可以异步通信,降低了耦合性,适用于多个设备之间的实时通信。发布者发布消息后,不需要等待订阅者的响应,从而提高了系统的响应性能。

可靠性
        MQTT支持消息的持久性传输,确保消息的可靠性,这在物联网应用中非常重要,MQTT可以通过控制可靠性级别来确保消息传递的可靠性。

安全性
        MQTT支持使用TLS/SSL进行加密通信,确保数据传输的安全性。此外,MQTT还支持用户名和密码进行认证,保护客户端和服务器之间的通信安全。

3. MQTT 协议原理

        实现MQTT协议需要:客户端和服务器端

        MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

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

        Topic: 可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)

        payload: 可以理解为消息的内容,是指订阅者具体要使用的内容

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

订阅(Subscription)

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

会话(Session)

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

主题名(Topic Name)

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

主题筛选器(Topic Filter)

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

负载(Payload)

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

 
 

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

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

相关文章

arcgis栅格数据处理3——定义投影(同样适用于其他类型文件)

进行数据连接时可能出现未设置投影无法链接的情况,需要先定义投影 点击最右侧“目录”,弹出带有系统工具的面板,点击“data management tools”点击“投影”,“定义投影”

Redis的缓存穿透?缓存击穿?缓存雪崩?

缓存穿透 什么是缓存穿透? 假如我们有一个学生表一共有10条数据,对应的id为1-10。我们有一个请求是通过id去查询学生的信息。正常的流程是请求先到redis里面去找,如果命中就将查询到的结果反回,如果没有就去mysql数据库中找&…

chatgpt与人类有何不同?

ChatGPT和人类之间存在多个显著的差异。 首先,ChatGPT是一种基于人工智能技术的计算机程序,通过机器学习和自然语言处理等技术,从大量的数据中获取知识并生成语言输出。它主要依赖于算法和数据进行工作,能够迅速处理和检索信息&a…

OpenCV(六)——对于图片的算术运行、图片的叠加操作、多通道图像拆分为多个单通道图像

在OpenCV中,可以对于图片进行算法运算。我们知道,图像的本质其实就是矩阵,因此对于图像的算数运算本质上就是对于矩阵的算术运算。在OpenCV可以对图像进行算术运算的操作有加、减、乘、除等操作。 图像的加、减、乘、除操作 两张图像可以进…

微信小程序开发系列(二十六)·小程序运行机制(启动、前后台状态、挂起、销毁)和小程序更新机制

目录 1. 小程序运行机制 1.1 启动 1.2 前台和后台状态 1.3 挂起 1.4 销毁 2. 小程序更新机制 1. 小程序运行机制 1.1 启动 小程序启动可以分为两种情况,一种是冷启动,一种是热启动。 冷启动:如果用户首次打开,或小…

数据挖掘案例分析、经典案例、技术实现方案

1.数据挖掘案例分析 数据挖掘:是从大量数据中发现有用信息和模式的过程。 数据挖掘案例分析:是指通过对已有数据进行挖掘和分析,发现其中的模式和规律,并根据这些发现提出相应的解决方案和决策建议的过程。 以下是一些常见的数据…

Java中交集、并集、差集、补集

一、交集 //交集Testpublic void intersection(){//向集合中添加元素ArrayList<String> datas new ArrayList<>();Collections.addAll(datas, "张三", "李四", "王五", "赵六");//向集合中添加元素ArrayList<String&…

03-快速上手RabbitMQ的5种消息模型

RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件,有几个常见概念 connections(连接): 将来publisher(消息的发送者)或者consumer(消息的接收者)都需要先与MQ建立连接 channel(通道): 建立连接后需要创建通道,生产者和消费者就是基于通道完成消息的发送和接收 ex…

django自定义表单

文章目录 django自定义表单两种方式自定义错误信息widgets实例化和初始化处理用户提交的数据验证表单通用类试图使用表单Formset django自定义表单 两种方式 继承Form类继承ModelForm类 from django import forms from .models import Contact# 自定义表单字段 class Contac…

_note_06

1.说一说函数的按地址传递和按值传递&#xff0c;他们的区别是什么&#xff1f; 函数的参数传递方式可以分为按地址传递&#xff08;也称为按引用传递&#xff09;和按值传递两种方式。按值传递是指将实际参数的值复制给形式参数&#xff0c;即在函数调用时&#xff0c;实际参数…

探索云原生数据库技术:构建高效可靠的云原生应用

数据库是应用开发中非常重要的组成部分&#xff0c;可以进行数据的存储和管理。随着企业业务向数字化、在线化和智能化的演进过程中&#xff0c;面对指数级递增的海量存储需求和挑战以及业务带来的更多的热点事件、突发流量的挑战&#xff0c;传统的数据库已经很难满足和响应快…

2023年终总结——跌跌撞撞不断修正

目录 一、回顾1.一月&#xff0c;鼓足信心的开始2.二月&#xff0c;焦躁不安3.三月&#xff0c;路还是要一步一步的走4.四月&#xff0c;平平淡淡的前行5.五月&#xff0c;轰轰烈烈的前行6.六月&#xff0c;看事情更底层透彻了7.七月&#xff0c;设计模式升华月8.八月&#xff…

04hive数仓内外部表复杂数据类型与分区分桶

hive内部表和外部表 默认为内部表&#xff0c;外部表的关键字 &#xff1a;external内部表&#xff1a;对应的文件夹就在默认路径下 /user/hive/warehouse/库名.db/外部表&#xff1a;数据文件在哪里都行&#xff0c;无须移动数据 # students.txt 1,Lucy,girl,23 2,Tom,boy,2…

Python实战:Python常用IDE选择

在Python编程的旅程中&#xff0c;选择一个合适的开发环境至关重要。本文将详细介绍三种流行的Python开发环境&#xff1a;PyCharm、VS Code和Jupyter Notebook。我们将探讨它们的特点、安装步骤、基本使用方法&#xff0c;并通过具体的代码示例来展示如何在这些环境中编写和运…

Python中,括号内部的for循环(列表推导式)

在Python中&#xff0c;括号内部的for循环通常用于列表推导式&#xff08;list comprehension&#xff09;&#xff0c;这是一种简洁创建列表的方式。列表推导式可以使用任何可迭代对象内的元素来创建新的列表元素。 列表推导式的基本语法结构如下&#xff1a; [expression f…

Kafka的分区机制

Kafka的分区机制是其核心功能之一&#xff0c;旨在提高可扩展性和并行处理能力。下面概述了Kafka分区的基本概念和工作原理&#xff1a; Kafka分区基本概念 分区&#xff08;Partition&#xff09;&#xff1a;Kafka中的主题&#xff08;Topic&#xff09;可以细分为多个分区…

政安晨:【深度学习处理实践】(五)—— 初识RNN-循环神经网络

RNN&#xff08;循环神经网络&#xff09;是一种在深度学习中常用的神经网络结构&#xff0c;用于处理序列数据。与传统的前馈神经网络不同&#xff0c;RNN通过引入循环连接在网络中保留了历史信息。 RNN中的每个神经元都有一个隐藏状态&#xff0c;它会根据当前输入和前一个时…

Java EE之wait和notify

一.多线程的执行顺序 由于多个线程执行是抢占式执行&#xff0c;就会导致顺序不同&#xff0c;同时就会导致出现问题&#xff0c;就比如俩个线程同时对同一个变量进行修改&#xff0c;我们难以预知执行顺序。 但在实际开发中&#xff0c;我们希望代码按一定的逻辑顺序执行&am…

AI辅助研发:引领科技创新的未来之路

随着人工智能技术的快速发展和广泛应用&#xff0c;AI辅助研发正逐渐成为科技界和工业界的焦点。2024年&#xff0c;作为AI技术进一步成熟的见证者&#xff0c;我们正处于AI辅助研发的黄金时代。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI的影响力已…

计算机视觉——P2PNet基于点估计的人群计数原理与C++模型推理

简介 人群计数是计算机视觉领域的一个核心任务&#xff0c;旨在估算静止图像或视频帧中的行人数量。在过去几十年中&#xff0c;研究人员在这个领域投入了大量的精力&#xff0c;并在提高现有主流基准数据集性能方面取得了显著进展。然而&#xff0c;训练卷积神经网络需要大规…