一文读懂MQTT的用途
liebian365 2024-11-18 14:15 12 浏览 0 评论
MQTT 有何用途?
MQTT 是一种轻量级消息传递协议,通常与 IoT 设备一起使用,旨在提高能效并消耗最少的带宽。MQTT 协议运行在 TCP/IP 之上,基于双向发布-订阅模型,无损通信,确保 MQTT 消息高效、无损传递。MQTT 是一种低开销协议,充分考虑了带宽和 CPU 限制。它被设计为能够在嵌入式环境中运行,可靠且有效地提供通信途径。
MQTT 从根本上来说是一种发布/订阅 (pub/sub) 协议。它允许客户端作为发布者、订阅者或两者连接到特定主题。您连接到处理所有消息传递的代理,其中每个客户端都由唯一的客户端 ID 标识。
现实生活中的 MQTT 示例和用例
MQTT 通常用于 IoT 应用程序,用于连接传感器、执行器和家用电器等低功耗设备并进行通信,从而有效管理传输的数据负载。
在农业中,MQTT 用于监测土壤湿度、温度和湿度等环境因素,使农民能够采取适当的行动。在工业自动化中,MQTT 可以监控端到端制造过程,确保质量一致并识别生产链上的系统问题。在交通领域,MQTT 用于监控交通信号灯、停车计时器和公共交通的实时位置,同时考虑到生态系统和低带宽要求。
为什么使用 MQTT 而不是 HTTP?
HTTP 和 MQTT 是两种截然不同的通信协议,用于不同的目的。
HTTP 是一种请求/响应协议,仅响应客户端的请求而传送数据。它专为大量数据而设计,通常用于传输网页、图像和视频。 MQTT 是一种发布/订阅协议,支持异步消息传递,多个客户端能够订阅单个主题并从一个或多个发布者接收消息。 MQTT 针对少量数据进行了优化,但在网络开销和设备功耗方面比 HTTP 更高效,使其成为需要低带宽和最低功耗的应用程序(例如由 AWS IoT 服务管理的应用程序)的合适选择。
MQTT 是用什么语言编写的?
MQTT 只是一个协议,可以用多种语言编写。然而,MQTT 客户端库(用于使用 MQTT 协议进行通信)提供多种语言版本,例如 C/C++、Java、Python 和 JavaScript,包括 Node.js、Ruby、Go、PHP 和 Swift。 MQTT 客户端库通过 MQTT 代理进行通信,该代理也支持多种编程语言。
MQTT 是如何工作的?
MQTT 是一种非常灵活的协议,但只有两个基本实体:MQTT 客户端和 MQTT 代理。
MQTT 客户端如何工作?
MQTT 客户端可以是任何实现 MQTT 协议的端点。就 IoT 而言,客户端是连接的设备,例如传感器、监视器或 Arduino 板,但 MQTT 并不限于 IoT,客户端也可以是智能手机或笔记本电脑等。
MQTT 客户端之间不直接通信。尽管如此,所有交互都是由称为 MQTT 代理的服务器组件“代理”的,该组件位于客户端之间并处理消息的路由。
什么是 MQTT 分组?
MQTT 中的所有通信都分为“主题”。 MQTT 客户端可以向主题发布消息并订阅以接收来自其他主题的消息。主题可以是任何字符串,旨在对共同感兴趣的主题进行分组,例如,传感器更新将发布到主题,群聊中的消息也会发布到主题,具体取决于用例。
什么是 MQTT 代理?
代理负责管理哪些客户端订阅哪些主题,接收在特定主题上发布的消息,并将该消息发送到订阅更新的任何客户端。当客户端和代理之间的连接丢失时,代理还负责缓存消息并在连接重新建立时将其传递给客户端。
可以使用哪些 MQTT 代理?
MQTT 代理是 MQTT 协议的基础,可以被视为 MQTT 服务器。有许多 MQTT 代理,包括开源的和专有的,并且任何基于 MQTT 的部署中最重要的架构决策之一是如何托管代理。由于 MQTT 设计为大规模运行,因此任何代理架构都需要相应扩展。大多数企业部署将依赖于云托管的专有产品,因此没有任何基础设施问题,尽管也可以使用自托管选项。
代理位于所有通信之间,可以保留消息并保存所有会话的安全记录;客户端彼此隔离,因此客户端的不安全性和漏洞可以被沙箱化,并且根据您的网络拓扑,代理可以减少整个网络上的流量并允许更有效的路由。
如何使用 MQTT 和 Pub/Sub
任何支持 MQTT 协议的客户端都可以订阅和发布主题,但所有通信都通过代理进行,如下面的示例模型所示。
MQTT协议特点
虽然 MQTT 通常被视为 IoT 解决方案,但它只是支撑许多知名 IoT 产品的协议。 MQTT 的许多功能使其特别适合设备之间的高效通信:
易于启动和运行
MQTT 已经存在很长时间了,并且有许多强大、可靠且可扩展的专有和开源解决方案。这些预先存在的 MQTT 组件可用于所有项目,从大型解决方案到激情项目,无需修改,无论开发人员经验如何。
可靠性和配置
MQTT 具有服务质量 (QoS) 的概念(稍后详细讨论),它在 MQTT 代理上对消息进行排队和缓存,并在重新建立连接时将它们传递给客户端。这对于部分连接的设备或具有间歇性连接的客户端(例如物联网设备)尤其有效。
客户无需考虑解决方案架构
使用 MQTT,您可以将消息发布到主题并在可用时接收它们。作为客户,您不必担心建立或重新建立连接或您的收件人是否正在侦听您的消息,它“正常工作”。
专为规模化而设计
MQTT 可以应对您的解决方案所需的任何规模,从初创公司到跨国公司。最著名的是,Facebook Messenger 使用 MQTT 进行通信。
MQTT 会话生命周期
MQTT 依赖 TCP/IP 进行连接,因此遵循类似的生命周期
联系: MQTT 客户端发起与 MQTT 代理的连接。通常,这将通过标准 MQTT 端口(分别用于安全和不安全连接的 1883/883)
验证:对于底层 TCP/IP 连接,MQTT 协议没有任何超出 TLS 的身份验证考虑因素,这对于大多数用例来说已经足够了。
发布/订阅:连接后,客户端可以发布或订阅主题以发送和接收消息。
断开:断开连接可以由客户端或代理发起,并将导致 MQTT 会话在处理任何正在进行的请求后结束。
MQTT 服务质量 (QoS)
服务质量允许解决方案设计者指定 MQTT 连接的可靠性,一般来说,连接越可靠,重试和消息保留的潜在内存开销就越大。
服务质量-1:该消息仅发送一次,客户端和代理无需采取其他步骤来确认发送。这也称为“即发即忘”。这仅适用于客户端发送的消息。一旦消息在代理处被接收,它们将被视为 QoS 0
服务质量 0:发送者和接收者进行握手以确保只收到消息的一份副本。这可以确保传递并避免发送消息的多个副本。
服务质量1:该消息将被重新发送多次,直到收件人确认收到该消息。这最适合时间敏感的消息,但可能会导致收到重复的消息。
MQTT 用例和 IoT
MQTT 是一种轻量级且节能的协议,多年来一直用于以这些为关键考虑因素的解决方案中。
IoT 是最流行的示例,MQTT 非常适合。物联网设备通常由电池供电,维护成本非常昂贵,因此最好在电池更换之间保持较长时间。虽然在家庭环境中,时不时地更换电池并不困难,但在工业环境中,有数千个传感器,分布在广阔的区域,并且通常位于难以到达的位置,其维护费用很快就会变得昂贵。
MQTT 物联网用例包括火灾探测器、盗窃跟踪、位置监控、传感器、发动机状态等。MQTT 的数据开销也非常低,因此,在数据昂贵或部署了数千台设备的环境中,带宽是一个问题,MQTT 是理想的。
PubNub 和 MQTT 在 IoT 方面可以完美配合。请参阅我们的 IoT 演示和 IoT 教程,详细了解 全协议上,允许扩展,轻松促进群聊,并通过中央 MQTT 代理骨干基础设施分发所有数据。
相关推荐
- 4万多吨豪华游轮遇险 竟是因为这个原因……
-
(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...
- “菜鸟黑客”必用兵器之“渗透测试篇二”
-
"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...
- 科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白
-
作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...
- 麦子陪你做作业(二):KEGG通路数据库的正确打开姿势
-
作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...
- 知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势
-
智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...
- 每日新闻播报(September 14)_每日新闻播报英文
-
AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...
- 香港新巴城巴开放实时到站数据 供科技界研发使用
-
中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...
- 5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper
-
本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...
- Qt动画效果展示_qt显示图片
-
今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...
- 如何从0到1设计实现一门自己的脚本语言
-
作者:dong...
- 三年级语文上册 仿写句子 需要的直接下载打印吧
-
描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...
- C++|那些一看就很简洁、优雅、经典的小代码段
-
目录0等概率随机洗牌:1大小写转换2字符串复制...
- 二年级上册语文必考句子仿写,家长打印,孩子照着练
-
二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)