问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MQTT 基本认知

发布网友 发布时间:2022-09-04 14:27

我来回答

1个回答

热心网友 时间:2024-08-30 11:01

物联网 (internet of thing),表示的是可以把一些带某些传感器的设备(终端),接入到互联网的行为。
通过互联网连接这些设备,这些设备就能够互相协作。
MQTT就是这些设备之间数据通信的一个基于 TCP/IP 的协议。

每个终端都和实现了 MQTT协议的代理/服务器相连。
通过 publishedMQTT 代理服务器的某个主题发送数据。
通过 subscription从 MQTT 代理服务器获取自己订阅的 主题数据。

MQTT 协议是一种轻量级的、灵活的网络协议。并且非常适合 IOT 的场景。

大多数开发人员已经熟悉了 HTTP WEB 协议。那么为什么不让 IOT 设置链接到 WEB 服务?
设备可以采用 HTTP 请求的形式发送数据,并采用 HTTP 响应的形式从服务器获取数据,接受更新。
因为对于 IOT 的设备来说,这种主动请求--> 被动等待应答的数据传输模型存在严重的局限性:

那么,MQTT 为什么如此轻便且灵活?MQTT 协议的一个关键的特性是 发布/订阅模型。它将数据的发布者和接受者分离。

一个设备终端既可以是数据的发布者(published)也可以是数据的订阅者(subscription)

一个设备如果要发布数据,只需要往代理服务器中相应的主题发布数据内容即可。
一个设备如果需要接受到数据,只需要在代理服务器中,提前订阅自己需要关注的主题即可。

MQTT 最基本的体验,就是使用 mosquitto 。
Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
它可以理解成一个 MQTT 的代理服务器。

基本步骤如下:

安装成功截图

使用 brew services start mosquitto 启动 MQTT 服务

运行截图

然后再打开另外两个终端窗口,模拟两个IOT设备。A 订阅 MQTT 服务。B 向 MQTT 的服务发送数据。

A订阅当前MQTT的某个服务。

B向 MQTT 服务器发布(published) 数据。

然后,我们就可以在A控制台里看到由 B 通过 MQTT 服务发送的数据了。

基本流程图

控制台 A 向 MQTT 服务器订阅 dw/demo服务,并被动的等待 MQTT 服务器返回数据。
控制台 B 主动的向 MQTT 服务器的 dw/demo服务发送 published数据,之后。服务器会主动向事先订阅了 dw/demo的终端分发此消息。

MQTT 是一种链接协议,它指定了如何组织数据字节并通过 TCP/IP 网络传输它们。但实际上,开发人员并不需要链接这个链接协议的具体细节。我们只需要知道,每条消息都有一个命令和数据有效负载。该命令定义消息类型(比如 CONNECT 消息或者 SUB SCRIBE 消息)。所有的 MQTT 库和工具都提供了直接处理这些消息的基本方法,并且能自动填充一些必要的字段(在数据包的对应字节填充),比如消息和客户端 ID。

首先客户端发送一条CONNECT消息来链接代理。CONNECT 消息要求建立从客户端到代理服务器的链接。

CONNECT 命令的基本参数

当客户端向代理服务器发送一条 CONNECT命令之后,服务器会调用 CONNACK命令,告知服务链接的状态。

CONNACK 命令的基本参数

当客户端和服务器建立连接之后,客户端就可以向服务器订阅某些主题的。(发送一条或多条 SUBSCRIBE消息)。
表明当服务器接受到其他终端推送的此主题数据时,服务器会默认发送给它。

SUBSCRIBE 参数列表

当客户端成功的向服务器订阅某个主题之后,服务器会返回一条 SUBACK的消息,其中包含一个或者多个 returnCode 参数。

SUBACK消息参数

returnCode : 值 0 - 2 ,表示成功订阅,并返回这个订阅消息的 QOS。值 128 : 订阅失败。

既然客户端可以向服务器订阅某个主题,当然也可以取消订阅。
SUBSCRIBE订阅命令相反的命令是UNSUBSCRIBE取消订阅命令。
此命令非常简单。只有一个topic(主题)参数。

上面讲的是订阅,订阅是需要有消息从服务器发送过来的。但是服务器本身基本不产生数据,那数据从何而来呢?
通过另外一个客户端执行PUBLISH命令,往代理服务器发送数据。并最终通过代理服务器将数据传递给订阅了此服务的客户端。

PUBLISH 消息参数

对于 MQTT 的一张基本理解图

基本流程图:

最后总结

参考资料: 初识 MQTT

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
倩碧黄油适合哪种肤质的人使用? 倩碧有哪些护肤品比较受女性青睐? 倩碧紧致面霜适合哪些肤质的人使用? 倩碧护肤品适合什么肤质使用? 哪些肤质的人适合使用倩碧卓越润肤乳? 学校发的移动卡,套餐38的送一年宽带 现在卡不想用了,貌似宽带合约没到期... ...我居住浙江,有一个广西的移动卡,移动卡上还捆绑有宽带 我现在在外地我想注销移动卡或者联通卡怎么注销,回不到办卡的地方。 上海最建议去三个景点 为什么叫北京鸭篮球 springboot整合RabbitMQ Mqtt 1996农历412是什么星座 生日在412这天的人农历生日是什么时候 412年是什么年 职场中与同事之间怎么相处好? 在工作中如何和同事处好关系? 怎样在职场上和同事相处 在平面设计中,做喷画和户外广告时,怎么样做才能让图看起来效果比较好... 大街上那些宣传房产的平面广告画是用什么软件制作的?? 在职场上如何和同事处理好关系? 职场中如何与同事交往 谈下押韵的几个忌讳 闺蜜孩子天天打游戏,如何与沉迷游戏的孩子交流? 讨论诗词中的“撞韵”、“挤韵”和“连韵”等问题 什么是诗词中的撞韵? 在工作当中,怎样才能处理好与同事之间的关系?如何才能相处融洽呢? 怎么在工作中与同事相处 职场中如何与同事良好相处 如何在职场与同事和睦相处 为了健康,哪些人应该少喝茶? 与青春有关的日子经典台词? 薄荷怎么修剪 薄荷如何修剪 被盗,申述找回的时候要好友验证,但是好友也被删完了,要怎么才能... 30以内七的倍数是什么? 写出30以内,所有7的倍数:__ 三十以内7的倍数有什么 30以内7的倍数 不同手指戴戒指的含义各有什么不同? 30以内7的倍数(),这道题后面写不写省略号? 30以内7的倍数有哪些 7的所有倍数有哪些? 急需一篇长岛导游词 越快越好 谢啦 关于湖州长岛公园的导游词 烟台导游词 湖南君山岛的导游词范文5篇 30以内7的4个倍数从小到大排列是 沈阳师范大学艺术生录取分数线是多少 故今之墓中全乎为五人也什么句式 五人墓碑记中,激昂大义、投缳道路、有重于社稷是介宾后置句吗?若不是... 五人墓碑记中,立石于其墓之门的句式?