MQTT基础入门与资料收集

news2024/11/26 14:33:37

文章目录

  • 目的
  • 基础入门
  • MQTT相关软件
    • MQTT客户端软件
    • MQTT Broker(服务器)软件
  • MQTT编程
  • 总结

目的

最近项目中涉及到MQTT相关内容,在此对相关内容做个基础的梳理。

基础入门

MQTT官网: https://mqtt.org/

在这里插入图片描述

MQTT是用于物联网(IoT)的OASIS标准消息传递协议。它被设计为一种非常轻量级的发布/订阅消息传输,非常适合连接代码占用空间小、网络带宽最小的远程设备。MQTT目前广泛应用于汽车、制造、电信、石油和天然气等行业。

MQTT是一种 发布/订阅 机制的通讯架构:
在这里插入图片描述
MQTT的服务器(Broker)和常见的HTTP服务器这些区别蛮大的。常见的HTTP服务器是有具体的业务逻辑功能的,所以服务器需要自行编写代码;而MQTT服务器只负责客户端接入和消息分发等工作,这些工作都是由MQTT协议标准规定好的,并不包含具体应用中的业务逻辑。MQTT客户端即可以是消息的发布者也可以是消息的接收者,所以真正的业务逻辑只和客户端有关。

MQTT中的消息都有各自的topic,客户端发布消息时要声明消息的topic,客户端作为消息接收者的话需要订阅topic。服务器在收到消息时会将其推送给已经订阅了的客户端。目前大多数情况下服务器不用手动建立topic,而是会在收到未被使用过的topic的消息时自动记录。

MQTT中有个QoS机制来控制消息传递的质量:QoS0 - 最多交付一次;QoS1 - 至少交付一次;QoS2 - 只交付一次。发布和订阅时都有QoS参数,如果发布方的QoS比较小则以发布方的Qos为准。

MQTT除了上面的一些机制,最终还是为用来传递消息的,其消息格式最少需要有两个字节的头部消息:
在这里插入图片描述
第一个字节用于表达消息类型以及一些标识符;第二个字节用于表达接下来数据的长度。长度字段的 最高Bit为1 用来表示还需要再一个字节来表达长度,依此类推,最多可以用四个字节来表达消息长度,最大可以表示的长度为 256MB - 1Byte:
在这里插入图片描述

MQTT目前流行的 3.1.15.0 两个协议标准,协议是向下兼容的。另外还有 MQTT-SN 标准,设计上主要用于性能受限的一些设备中,协议格式上和前两者有一些区别。

MQTT比较简单,网上教程也非常多,比如下面链接就对相关的各种内容都介绍的比较详尽:
《MQTT 最全教程:从入门到精通 | EMQ》https://www.emqx.com/zh/mqtt-guide

MQTT相关软件

MQTT在实际使用时往往是嵌入在应用程序代码中来使用的,不过很多时候也需要一些软件进行通讯测试使用,下面列出一些比较常用的软件。

MQTT客户端软件

MQTTX
主页:https://mqttx.app/zh
项目地址:https://github.com/emqx/MQTTX
Web客户端:https://mqttx.app/zh/web
命令行工具:https://mqttx.app/zh/cli

MQTT Explorer
主页:https://mqtt-explorer.com/
项目地址:https://github.com/thomasnordquist/MQTT-Explorer

MQTT Broker(服务器)软件

MQTT因为服务器并不涉及具体的业务逻辑,所有很多情况下并不需要手动搭建服务器,很多云服务提供商都有提供MQTT服务,如果要测试使用的话通常使用免费的服务就够用了。当然也有一些本地的MQTT服务器软件可以用。

EMQX
主页:https://www.emqx.io/zh
项目地址:https://github.com/emqx/emqx

下载后解压得到程序,使用下面方式运行程序:

# 启动
.\bin\emqx start
# 查询运行状态
.\bin\emqx ctl status
# 停止
.\bin\emqx stop

在这里插入图片描述

EMQX启动后可以从浏览器打开管理面板 http://localhost:18083/ ,默认用户名 admin 和默认密码 public
在这里插入图片描述

Eclipse Mosquitto
主页:https://mosquitto.org/
项目地址:https://github.com/eclipse/mosquitto

NanoMQ
主页:https://nanomq.io/
项目地址:https://github.com/emqx/nanomq

VerneMQ
主页:https://vernemq.com/
项目地址:https://github.com/vernemq/vernemq

MQTT编程

大多数时候在应用程序中使用MQTT都是作为客户端来使用的,作为客户端使用最出名的项目就是 Eclipse Paho 了:
https://eclipse.dev/paho/
在这里插入图片描述
可以看到支持非常多的语言。

上面项目中对于JavaScript的支持仅限于Websocket通讯,而目前JS不光用在前端中,在后端也很流行,这时候可以使用下面的库在作为全功能的MQTT客户端使用:
https://github.com/mqttjs/MQTT.js

另外如果有作为服务器使用的需求的话我个人觉得使用Golang比较不错,下面是几个流行的库:
https://github.com/mochi-mqtt/server
https://github.com/DrmagicE/gmqtt
https://github.com/fhmq/hmq

总结

MQTT比较简单,基本上有个服务器,找个客户端软件测试下消息收发就可以开始使用了。

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

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

相关文章

十大经典排序算法

目录 前言 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 十大排序之间的比较 总结 前言 学了数据结构之后一直没有进行文字性的总结,现在趁着还有点时间把相关排序的思路和代码实现来写一下。概念的话网上…

【LeetCode】307 . 区域和检索 - 数组可修改

307 . 区域和检索 - 数组可修改 区间和解题思路 这是一道很经典的题目,通常还能拓展出一大类问题。 针对不同的题目,我们有不同的方案可以选择(假设我们有一个数组): 数组不变,求区间和:「前缀和…

多线程(进阶)

一、常见的锁策略 1.1读写锁 多线程之间,数据的读取方之间不会产生线程安全问题,但数据的写入方互相之间以及和读者之间都需 要进行互斥。如果两种场景下都用同一个锁,就会产生极大的性能损耗。所以读写锁因此而产生。 读写锁(r…

高通清库存芯片大降价,由于手机复苏不及预期

KlipC报道:8月14日,高通为刺激客户拉货意愿并加快出清库存,近期也开启了降价模式,锁定中低端 5G 手机芯片。 KlipC的合伙人Andi D指出高通在非苹中高端手机市场一直处于领先地位,因此本次降价聚焦在中低阶领域&#xf…

生成模型的三个挑战:成功部署或吓跑用户?

一、说明 目前在文本和图像领域中,统治江湖的有六大门派,他们是:OpenAI,Google,Microsoft,Midjounery,StabilityAI,CharecterAI. 每个人都在竞相为文本到文本,文本到图像…

万物识别RAM:图像识别模型,Zero-Shot超越有监督

文章目录 RAM的优势RAM的创新点总结与展望参考文献大语言模型(Large Language Models)已经给自然语言处理(NLP)领域带来了新的革命。在计算机视觉(CV)领域,Facebook近期推出的Segment Anything Model(SAM)工作,在视觉定位(Localization)任务上取得了令人振奋的结果…

怎么对视频进行压缩?

怎么对视频进行压缩?视频压缩,我们都知道是将视频文件进行压缩变小的过程,是我们日常办公中较为常用的手段。现如今,在视频技术不断发展与创新的基础上,视频分辨率也在不断提高,进而导致文件占有量也非常大…

vue-cli前端工程化——创建vue-cli工程 router版本的创建 目录结构 案例初步

目录 引出创建vue-cli前端工程vue-cli是什么自动构建创建vue-cli项目选择Vue的版本号 手动安装进行选择创建成功 手动创建router版多了一个router 运行测试bug解决 Vue项目结构main.jspackage.jsonvue.config.js Vue项目初步hello案例 总结 引出 1.vue-cli是啥,创建…

Docker中部署Nginx

1.Nginx部署需求 2.操作教程 3.实际步骤 把配置粘过来。

什么是伪类选择器?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 伪类选择器⭐ 一些常见的伪类选择器示例::hover:active:focus:nth-child(n):first-child 和 :last-child ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何…

深入了解 Rancher Desktop 设置

Rancher Desktop 设置的全面概述 Rancher Desktop 拥有方便、强大的功能,是最佳的开发者工具之一,也是在本地构建和部署 Kubernetes 的最快捷方式。 本文将介绍 Rancher Desktop 的功能和特性,以及 Rancher Desktop 作为容器管理平台和本地…

HTML5+CSS3查缺补漏

浏览器的渲染过程 JS加载执行 普通js/sync&#xff1a;阻塞 DOM加载解析 async&#xff1a;下载完就执行&#xff0c;无依赖 <script type"text/javascript" src"x.min.js" async"async"></script> defer&#xff1a;渲染完再执行…

【从零学习python 】19. 循环遍历列表和列表嵌套的应用

文章目录 列表的循环遍历1. 使用while循环2. 使用for循环3. 交换2个变量的值1. 列表嵌套2. 应用 进阶案例 列表的循环遍历 1. 使用while循环 为了更有效率的输出列表的每个数据&#xff0c;可以使用循环来完成 namesList [xiaoWang,xiaoZhang,xiaoHua] length len(namesLi…

【奶奶看了都会】2分钟学会制作最近特火的ikun幻术图

1.效果展示 最近ikun幻术图特别火啊&#xff0c;在网上能找到各种各样的ikun姿势图片&#xff0c;这些图片都是AI绘制的&#xff0c;能和风景完美融合在一起&#xff0c;今天小卷就来教大家怎么做这种图片 先看看图片效果 视频链接&#xff1a; 仿佛见到一位故人&#xff0c;…

安装 MySQL phpMyAdmin cpolar实现远程访问连接

文章目录 1. 安装Mysql2. 安装phpMyAdmin3. 修改User 表4. 本地测试连接5. 安装cpolar6. 配置公网访问地址7. 固定连接公网地址 群晖安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性&#…

牛客网华为OD前端岗位,面试题库练习记录01

题目一 质数因子 功能:输入一个正整数&#xff0c;按照从小到大的顺序输出它的所有质因子&#xff08;重复的也要列举&#xff09;&#xff08;如180的质因子为2 2 3 3 5 &#xff09; JavaScript Node ACM模式 const rl require("readline").createInterface({ i…

【需求输出】用户故事方法

文章目录 1、初识用户故事2、用户故事是描述需求的最好方式3、创建用户故事4、用户故事的分层管理5、编写用户故事的工具 1、初识用户故事 2、用户故事是描述需求的最好方式 3、创建用户故事 4、用户故事的分层管理 5、编写用户故事的工具

0101xss入门及pikachu靶场-xss-web安全-网络安全

文章目录 0 概述1 环境准备2 反射型xss2.1 概述2.1 靶场-反射型xss&#xff08;get&#xff09; 3 存储型xss3.1 概述3.2 靶场-存储型xss 4 DOM型xss4.1 概述4.2 靶场-DOM型xss 5 问题总结6.1 再次启动pikachu容器报错 结语 0 概述 学习路线&#xff0c;如如下图所示&#xff…

基于架构的软件开发方法

基于架构的软件开发方法 基于架构的软件开发方法是由架构驱动的&#xff0c;即指由构成体系结构的商业、质量和功能需求的组合驱动的。使用ABSD 方法&#xff0c;设计活动可以从项目总体功能框架明确就开始&#xff0c;这意味着需求抽取和分析还没有完成(甚至远远没有完成)&am…

ComponentOne Studio ASP.NET MVC Crack

ComponentOne Studio ASP.NET MVC Crack FlexReport增强功能 添加了对在Microsoft Windows上部署Microsoft Azure的支持。 添加了对显示嵌入字体的支持。 .NET标准版的经典C1PDF(Beta版) GrapeCity的经典C1Pdf库现在提供了基于Microsoft.NET标准的版本。在任何.NET应用程序(包括…