MQTT学习(一)

news2024/11/20 12:20:59

MQTT是一种与HTTP类似的应用层协议。

在某些物联网应用中,MQTT优于HTTP。
在这里插入图片描述
首先,HTTP是用于客户端服务器计算的以文档为中心的请求-响应协议。
HTTP是万维网的基础,但它不是专门为机器之间通信而设计的。

MQTT是一种机器对机器、以数据为中心的轻量级协议。用于在资源受限的环境中运行。

许多物联网项目要求设备在各种资源有限下运行。
在这里插入图片描述
与HTTP中的直接客户端服务器交互不同。
在这里插入图片描述
MQTT在发布/订阅范例下运行,中间有MQTT代理。

在这里插入图片描述
客户端可以将主题发布到MQTT代理或订阅主题。

MQTT还允许MQTT客户端和代理之间的持久连接,以及不同的服务质量级别。
在这里插入图片描述
连接到MQTT代理的所有设备都是MQTT客户端。
MQTT客户端的范围从计算机到移动电话,再到小型受限的传感器设备。

MQTT代理是一个MQTT服务器。

阿里云物联网简介

产品:设备的集合,通常指一组具有相同功能的设备。物联网平台为每个产品颁发全局唯一的productKey。每个产品下最多可以包含50万个设备。

设备:归属于某个产品下的具体设备。物联网平台为设备颁发产品内唯一的证书DeviceName。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。

Topic:Topic是UTF-8字符串,是发布(Pub)/订阅(Sub)消息的传输中介。可以向Topic发布或者订阅消息。

Topic类:同一产品下不同设备的Topic集合,用 p r o d u c t K e y 和 {productKey}和 productKey{deviceName}通配一个唯一的设备,一个Topic类对一个ProductKey下所有设备通用。

在这里插入图片描述

  • 设备接入:传统开发需要搭建基础设施,联合嵌入式开发人员与云端开发人员共同开发。开发工作量大,效率低。基于阿里云物联网平台的开发,提供设备端SDK,快速连接设备上云,效率高。同时支持全球设备接入、异构网络设备接入、多环境下设备接入和多协议设备接入。
  • 性能:传统开发需要自行实现扩展性架构,极难做到从设备粒度调度服务器、负载均衡等基础设施。基于阿里云物联网平台的开发,具有亿级设备的长连接能力、百万级并发处理能力,架构支撑水平性扩展。
  • 安全:传统开发需要额外开发、部署各种安全措施,保障设备数据安全是个极大挑战。基于阿里云物联网平台的开发提供多重防护,保障设备数据安全。设备认证保障设备安全与唯一性。传输加密保障数据不背篡改。云盾护航和权限校验保障云端安全。
  • 传统开发需要自行发现宕机,并完成迁移。迁移时服务会中断。稳定性无法保障。而基于阿里云物联网平台的开发,服务可用性高达99.9%,去中心化,无单点依赖。拥有多数据中心支持。
  • 传统开发需要购买服务器搭建负载均衡分布式架构,需要花费大量人力物力开发“接入+计算+存储”一整套物联网系统。
  • 一站式设备管理、实时监控设备场景、无缝连接阿里云产品。可灵活简便地搭建复杂物联网应用。

操作步骤

在这里插入图片描述

CONNECT控制报文

固定报头+可变报头+有效载荷

  • 固定报头:必须存在,用于描述报文信息。里面有指出什么类型的报文,报文的等级。
  • 可变报头:不一定存在,主要看什么样子类型的报文。
  • 有效载荷部分:这是内容。也是通信信息的存放的地方,只是有时候还会存放一些额外的信息。如客户ID。

在这里插入图片描述
固定报头(2字节)
在这里插入图片描述
可变报头

  • 协议名
    在这里插入图片描述

  • 协议级别
    在这里插入图片描述

  • 连接标志
    在这里插入图片描述

  • 保持连接
    保持连接(Keep Alive)是一个以秒为单位的时间间隔,表示为一个16位的字,它是指在客户端传输完成一个控制报文的时刻到发送下一个报文的时刻,两者之间允许空闲的最大时间间隔。
    客户端负责保证控制报文发送的时间间隔不超过保持连接的值。如果没有任何其他的控制报文可以发送,客户端必须发送一个PINGREQ报文。

在这里插入图片描述
在这里插入图片描述
有效载荷:客户端标识符+用户名+密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
UTF-8编码字符串,每一个字符串都有一个两字节的长度字段作为前缀。

连接返回码的值
在这里插入图片描述
在这里插入图片描述

剩余长度

在这里插入图片描述
剩余长度表示当前报文剩余部分的字节数,包括可变报头和负载的数据。

在这里插入图片描述

  • 剩余长度字段使用一个变长度编码方案,对小于128的值,它使用单字节编码。
  • 低7位有效位用于编码数据,最高有效位用于指示是否有更多的字节。剩余长度字段最大4个字节。

在这里插入图片描述
第7位为提示位,表示后面还有字节来表示。
低字节在前,高字节在后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

服务质量QOS

报文在发送的过程中可能存在丢失的情况,最直接的解决方案就是重新发送。

服务质量就是表示报文要分送几次。

  • QOS 0:最多分发一次
  • QOS 1:至少分发一次
  • QOS 2:只分发一次

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

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

相关文章

栅格地图、障碍物地图与膨胀地图(障碍物地图(三)写一张障碍物地图)

花了不少时间看完了障碍物地图的大致思路,这里简单根据前面的思路来写一个简易版的障碍物地图。 1.订阅一张地图 首先,我们需要一张静态地图作为原始数据,这个我们可以订阅当前的map来获取: void map_test1::MapCallback(const…

一文读懂 Pencil 积分,打开 Pencils Protocol 生态权益大门

近日,Scroll 生态项目 Penpad 近期将品牌全新升级为 Pencils Protocol ,在升级后,其从一个 Scroll 生态的原生 LaunchPad 平台进一步拓展为集 Staking、Vault 以及 Shop 等功能于一体的全新生态。全新的品牌升级不仅让 Pencils Protocol 生态…

鸿蒙内核源码分析 (内核启动篇) | 从汇编到 main ()

这应该是系列篇最难写的一篇,全是汇编代码,需大量的底层知识,涉及协处理器,内核镜像重定位,创建内核映射表,初始化 CPU 模式栈,热启动,到最后熟悉的 main() 。 内核入口 在链接文件…

nginx配置域名与IP访问服务冲突问题

在最近的一次开发中遇到一个问题,我在云服务器上部署了两个服务,A服务和B服务, A服务在服务器中用的端口是80端口,所以我在浏览器访问的地址就是 B服务在服务器中用的是9818端口,所以我在浏览器访问的是 现在我给B服务…

Network Compression

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了Network Compression,包括为什么要压缩,压缩的主要手段(pruning,knowledge distillation,parameter quantization,architect…

Linux线程(四) 生产者消费者模型

目录 一、什么是生产者消费者模型 基本概念 优点以及应用场景 二、 基于阻塞队列的生产者消费者模型 三、POSIX信号量 四、基于环形队列的生产消费模型 一、什么是生产者消费者模型 Linux下的生产者消费者模型是一种经典的多线程或多进程编程设计模式,它用于解…

2024年3月 电子学会青少年等级考试机器人理论真题六级

202403 青少年等级考试机器人理论真题六级 第 1 题 下列选项中,属于URL的是?( ) A:192.168.1.10 B:www.baidu.com C:http://www.kpcb.org.cn/h-col-147.html D:fe80::7998:ffc8…

【MIT6.S081】Lab7: Multithreading(详细解答版)

实验内容网址:https://xv6.dgs.zone/labs/requirements/lab7.html 本实验的代码分支:https://gitee.com/dragonlalala/xv6-labs-2020/tree/thread2/ Uthread: switching between threads 关键点:线程切换、swtch 思路: 本实验完成的任务为用户级线程系统设计上下文切换机制…

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

slicetype_frame_cost 函数 函数功能 这个函数的核心是计算编码一系列帧(从 p0 到p1,以 b 为当前帧)的代价 cost,并根据这个代价 cost来辅助帧类型决策。它考虑了运动搜索的结果、帧间和帧内预测的成本,并且可以并行处理以提高效率。该函数在帧类型决策、MBtree 分析、场…

有一个21年的前端vue项目,死活安不上依赖

在公司开发的时候遇到的一个很玄幻的问题,这个项目是21年开发的,现在我是24年中途二开增加新功能 这个项目经过多人之手,现在已经出现了问题------项目依赖安不上,我能启动完全是因为在23年的时候写这个项目的时候将依赖费九牛二虎之力下载好后打成了压缩包发给另外一个安不上依…

【Java学习笔记10 Java Web 应用——JSP

JSP(Java Script Pages)技术是一种网站开发技术,可以让Web开发人员快速、高效的开发出易于维护的动态网页。使用JSP技术开发的Web应用程序具有跨平台性,不需要修改程序,发布后即可在Windows、Linux等不同的操作系统中运行。 10.1 JSP技术概述…

【JavaWeb】前后端分离SpringBoot项目快速排错指南

1 发起业务请求 打开浏览器开发者工具,同时显示网络(Internet)和控制台(console) 接着,清空控制台和网络的内容,如下图 然后,点击你的业务按钮,发起请求。 首先看控制台…

nginx 配置域名SSL证书HTTPS服务

下载 上传根目录 /home/wwwroot/xx.com/ssl 从新执行 添加域名命令 选择添加SSL SSL Certificate file: 填写 完整目录 PEM文件地址 SSL Certificate Key file:填写 完整目录 key文件地址

OmniDrive:具有 3D 感知推理和规划功能的自动驾驶整体 LLM-智体框架

24年5月北理工、Nvidia和华中科大的论文“OmniDrive:A Holistic LLM-Agent Framework for Autonomous Driving with 3D Perception Reasoning and Planning”。 多模态大语言模型(MLLMs)的进展导致了对基于LLM的自动驾驶的兴趣不断增长&…

QT状态机10-QKeyEventTransition和QMouseEventTransition的使用

1、QMouseEventTransition的使用 首先明白 QMouseEventTransition 继承自 QEventTransition类。 关于QEventTransition类的使用,可参考 QT状态机9-QEventTransition和QSignalTransition的使用 回顾 QT状态机9-QEventTransition和QSignalTransition的使用 中的状态切换代码,如…

NSS【web】刷题

[SWPUCTF 2021 新生赛]jicao 类型&#xff1a;PHP、代码审计、RCE 主要知识点&#xff1a;json_decode()函数 json_decode()&#xff1a;对JSON字符串解码&#xff0c;转换为php变量 用法&#xff1a; <?php $json {"ctf":"web","question"…

《Fundamentals of Power Electronics》——阻抗和传递函数的图解构造

通常&#xff0c;我们可以通过观察画出近似的波德图&#xff0c;而不需要大量杂乱的代数和不可避免的相关代数错误。使用这种方法可以对电路的工作原理有很大的了解。在不同频率下&#xff0c;哪些元件主导电路响应变得很清楚&#xff0c;因此合适的近似变得很明显。可以直接得…

JAVA毕业设计141—基于Java+Springboot+Vue的物业管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的物业管理系统(源代码数据库)141 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、员工、用户三种角色(角色权限可自行分配) 1、用户&#xff1a; …

《看漫画学C++》背后的故事6:死循环

C 中的死循环是指一个循环结构没有终止条件&#xff0c;导致程序永远无法跳出该循环&#xff0c;从而陷入无限循环的状态。这种情况通常是由于逻辑错误或编程错误导致的。 在《看漫画学C》中我们用这样一副漫画描述死循环。 购书链接&#xff1a;https://item.jd.com/144188…

AQS应用--CountDownLatch

一、是什么 顾名思义&#xff0c;Latch是门闩的意思&#xff0c;把到达门闩的线程都阻塞住&#xff0c;CountDown是减少计数的意思。 所以CountDownLatch是当每个线程到达某个状态就将计数减一&#xff0c;计数为0时所有被阻塞线程全部被唤醒。 二、内部实现 CountDownLatch…