MQTT解读【全网最易懂】

news2024/11/30 2:31:12

目录

前言

一、MQTT相比于TCP长连接的优势

1、协议更标准

2、MQTT协议制定好了很多利于物联网的功能

3、理解数据内容,用数据产生价值

二、选择MQTT还是TCP长连接透传

1、原始的业务场景

2、端对端M2M场景——无人汽车

3、APP控制设备端场景——智能家居、智能快递柜

4、其他场景

总结


前言

在接触到MQTT之后,总是会有疑问,为什么用MQTT不用TCP长连接透传?看起来【TCP长连接+私有协议透传】和【MQTT+业务主题】似乎都能达到同样的目的,甚至用MQTT会使得设备端逻辑实现、APP端逻辑实现、云端架构实现更加复杂。那么为什么物联网还要使用MQTT协议呢?

一、MQTT相比于TCP长连接的优势

1、协议更标准

MQTT是标准的RFC协议,相比于私有协议而言更加标准。好处在于:

(1)协议非常完整,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,看有无缺陷或欠考虑的地方等。

(2)协议的标准化带来大量的开源组件,降低开发难度。随着物联网+5G生态越来越好,开源组件越来越多,可以减少重复编码量。

(3)标准协议利于第三方接入。当第三方设备、平台想要对接的时候,拿出一套标准的MQTT协议拍在他们脸上,再也没人有理由要求改接口了。

2、MQTT协议制定好了很多利于物联网的功能

当然TCP自己开发协议也能做到,但MQTT都已经把功能做好了,自己开发协议反而增加难度。有利的功能包括:

(1)心跳机制。不需要自己做业务协议层的心跳了。

(2)遗嘱消息。这对于经常掉线的物联网设备而言非常有用。

(3)QoS质量等级+离线消息。持久会话离线的消息也能接收到,对于网络不稳定但要求必须送达的物联网场景很有用。

(4)异步机制。MQTT将消息以QoS1/2发送出去后,设备端就不需要再管了,一切由云端负责失败重传。

(5)订阅发布机制。一次发布,多个客户端订阅,这对于M2M场景很省电、省流量。

(6)主题和安全。可以用主题来方便地控制客户端权限。

以上的功能基于TCP自己开发也能做到,如果自己都开发了,不就是实现了应用层的MQTT协议了吗

3、理解数据内容,用数据产生价值

IoT目前主流设计有两部分:

(1)设备影子价值

微软Azure叫设备孪生(Device Twins),亚马逊AWS叫设备影子(Device Shadow),阿里云叫设备影子(Device Shadow),腾讯云叫设备影子(Device Shadow),百度云叫物影子(Shadow)。为什么这么多大厂都要开发这个概念呢,设备影子包含了设备的状态,不用一个一个透传查询设备,直接在云端访问设备影子就能够得到当前所有设备的状态数据,这蕴含着巨大的利益,比如统计数据用于引导开发新产品和功能、统计数据用于修复bug等等。

(2)规则引擎价值

AWS、阿里云、腾讯云、百度云,都叫规则引擎(Rule Engine)。由于MQTT细分了具体的主题,当业务以主题区别的时候,直接将对应主题的数据通过规则引擎配置的规则自动分发给其他的数据接收者,比如阿里云可以发送给:

  • 关系数据库RDS,进行普通存储
  • 时序数据库TSDB,可用于时序分析
  • 存储桶Bucket,当文件存储
  • 消息队列MQ,可以转发给多个其他服务
  • 函数计算,无服务器地处理某项工作
  • 实时流,实时地发送给某些对时间敏感的服务
  • 另一个主题,可以实现M2M通信

这些都可以有很多操作空间,随便举个例子,把所有的天猫精灵的语音数据发送到MQ,然后用后端服务慢慢分析,利用机器学习算法研究出什么样的用户群体喜欢使用什么样的功能,好针对性地卖产品,比如阉割一些功能,卖“青春版”天猫精灵,或者增加一些高端功能,卖“商务版”天猫精灵。

这些都是TCP透传这种云不理解业务数据内容做不到的(不要说TCP也可以解包然后分析业务数据然后转发,这样不就是变相地实现了MQTT了吗?有人想可以直接用MQ,但很多MQ的client/lib并不具备弱网+低功耗的微型设备使用条件,最终还是会演变为实现了类似MQTT的东西)。

二、选择MQTT还是TCP长连接透传

这需要看具体的业务场景。

1、原始的业务场景

MQTT之所以叫做“消息队列遥测传输”协议,就是因为最开始是用来将无人看管的石油天然气管道数据通过卫星链路上报给数据中心,当时的需求在于:

(1)石油天然气管道大多处于无人区,更不可能有基站了,只能通过偶尔覆盖的卫星来通信。卫星通信极其不稳定,很容易频繁断开连接。

(2)数据采集频率不高,且数据量小。

(3)有的消息很重要,需要有质量保证,比如石油泄漏,即使想发送的时候断网了,也应该在断网后能够传出去,且传出去必须要保证送达。

(4)采集设备都是嵌入式设备,要求低功耗。

这不就是MQTT的“会话机制”、“异步机制”、“QoS机制”等功能的体现吗。

2、端对端M2M场景——无人汽车

有的业务是不需要APP的,只有云和设备端,并且消息从一个设备端发到另一个设备端,这个时候用MQTT再合适不过了,因为一个设备如果想要发给多个设备消息,考虑到嵌入式资源有限一次只能保持一条TCP SSL连接,采用TCP透传必然要频繁建立TCP连接,这对低功耗的设备是致命的;而用MQTT,由云端负责转发就非常方便。

3、APP控制设备端场景——智能家居、智能快递柜

其实采用TCP透传和MQTT都可以,如果MQTT只订阅一个主题,只发布一个主题,payload填业务数据,不就退化成TCP长连接透传了吗。有的可能已经有私有协议了,如果想要把IoT做大,可以考虑MQTT协议;如果想减少成本尽快上线,用TCP透传也可以。

4、其他场景

MQTT还可以用于其他场景,比如APP消息推送(知乎网关),游戏数据长连接,网络聊天等等,都存在真实案例。他们不用TCP长连接的理由会有很多,比如知乎是为了复用同一套长连接系统,解耦业务数据,保证消息质量等。

总结

当别人问为什么要用MQTT不用TCP长连接透传的时候,要先体会MQTT的好处,然后结合自己的业务分析是否真的有必要上MQTT(毕竟MQTT整套下来成本比TCP高不少)。当然还有其他协议,比如室外的智能路灯由于只能通过基站上网,因此可以用插SIM卡的CoAP协议;一些总是插电的设备如路由器,甚至可以用HTTP协议。在纠结MQTT协议的时候,这些都是可以考虑的方向。

转自网络,有待考古

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

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

相关文章

RK3588的GPU驱动和桌面环境

这里主要是以orange pi 5 plus为对象作一个简单的笔记 首先看rk3588的gpu介绍,它用的是ARM的GPU,支持openGL ES和openCL(支持什么其实跟GPU驱动有关,arm官方闭源GPU驱动就只支持这两个) opi官方提供了debian的xfce和…

Linux网络编程系列之服务器编程——多路复用模型

Linux网络编程系列 (够吃,管饱) 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

ROS-6.参数的使用

参数的使用 参数服务结构命令行的使用方式运行小海龟命令介绍查看参数获取参数值设置参数保存参数到文件从文件导入参数 通过程序操作创建节点修改cmake编译运行 参数服务结构 ros中存在参数服务管理服务,管理这所有参数,所有节点剋订阅和发布这些节点 …

第三章 内存管理 三、覆盖与交换

目录 一、覆盖技术 二、交换技术 三、总结 一、覆盖技术 1、在覆盖技术中,我们要找到程序的调用结构。 2、因为这些程序不可能同时被调用(互斥调用),所以我们只需要选出需要空间最大的程序。 3、在物理内存中开拓一片与最大程…

ABB机器人关于重定位移动讲解

关于机器人如何重定位移动,首先来看一下示教器上的重定位移动是在哪。 从图中所示的坐标位置和操纵杆方向得知,重定位的本质是绕X、Y、Z轴的旋转。那么实现跟摇杆一样的操作,就可以通过改变当前位置的欧拉角来实现,参考Rapid指令…

小米笔记本Pro 15.6“频繁蓝屏解决办法

一、事情的缘起 2020年3月,我在小米官网购买这个笔记本,型号为:小米笔记本Pro 15.6" 2019款 四核i5 8G MX250 深灰。当时买这款笔记本,也是考虑到它屏幕比较大,而且配置也不错,四核8G的内存也足够我办…

测试需要写测试用例吗?

如何理解软件的质量 我们都知道,一个软件从无到有要经过需求设计、编码实现、测试验证、部署发布这四个主要环节。 需求来源于用户反馈、市场调研或者商业判断。意指在市场行为中,部分人群存在某些诉求或痛点,只要想办法满足这些人群的诉求…

并行Stream的性能测试

final long count 200_000_000;Random random new Random();//创建2亿条的listList<Integer> list Stream.generate(() -> random.nextInt(20)).limit(count).collect(Collectors.toList());// 顺序处理long startTime System.currentTimeMillis();list.stream().…

C语言联合体和枚举

C语言联合体和枚举 文章目录 C语言联合体和枚举一、联合体①联合体简介②联合体大小的计算 二、枚举 一、联合体 ①联合体简介 union Un {char c;int i; };像结构体一样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。但是编译器只为最大…

【Python数据分析工具】

文章目录 概要整体架构流程技术名词解释 概要 数据分析是一种通过收集、处理、分析和解释大量数据&#xff0c;以发现有价值信息、洞察趋势、制定决策并解决问题的过程。在现代科技和互联网的推动下&#xff0c;数据分析变得日益重要。它不仅仅是对数字和图表的简单解释&#…

GCOV覆盖率分析

安全之安全(security)博客目录导读 覆盖率分析汇总 目录 一、GCOV简介 二、GCOV使用示例 三、GCOV编译命令 四、运行并生成覆盖率报告 五、覆盖率报告分析 一、GCOV简介 因为动态代码分析可能只覆盖部分代码&#xff0c;所以我们需要一个代码覆盖工具&#xff0c;以了解…

APP备案避坑指南,值得收藏

目录 什么时间节点前需完成备案&#xff1f; APP/小程序一定要做备案吗&#xff1f; 涉及前置审批的APP有哪些&#xff1f; APP 支持安卓、IOS 多个运行平台&#xff0c;应该备案多少次&#xff1f; 企业是自有服务器&#xff0c;该如何进行APP备案&#xff1f; APP备案可…

探索服务器的无限潜能:创意项目、在线社区与更多可能

文章目录 1. 创意项目的孵化器1.1 托管你的应用1.2 测试和开发1.3 制定和实施你的计划 2. 构建在线社区2.1 自定义社交网络2.2 数据控制2.3 扩展和改进 3. 其他创意可能性3.1 博客和媒体网站3.2游戏服务器3.3 云存储3.4 数据分析3.5 远程办公 结论 &#x1f389;欢迎来到Java学…

你不一定知道的七种进程间通信方式

一、前言 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷贝到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信…

Easysearch压缩模式深度比较:ZSTD+source_reuse的优势分析

引言 在使用 Easysearch 时&#xff0c;如何在存储和查询性能之间找到平衡是一个常见的挑战。Easysearch 具备多种压缩模式&#xff0c;各有千秋。本文将重点探讨一种特别的压缩模式&#xff1a;zstd source_reuse&#xff0c;我们最近重新优化了 source_reuse,使得它在吞吐量…

【ROS2RUN源码解析:解决ROS2 run命令找不到问题的详细流程】

文章目录 概要整体架构流程技术名词解释小结 概要 当你在使用ROS2时遇到找不到可执行文件的错误时&#xff0c;首先需要执行以下步骤来诊断问题。首先&#xff0c;使用命令printenv AMENT_PREFIX_PATH&#xff08;或者ros2 pkg prefix加上包的名称&#xff09;来检查你的功能包…

AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用

本心、输入输出、结果 文章目录 AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用前言AutoGen 简介快速入门AutoGen 安装相关支持相关代码相关架构图弘扬爱国精神AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用 编辑:简简单单 Online z…

Chrome 浏览器关闭后再打开,需要重新登录账号,解决办法

最近&#xff08;2023-10-15&#xff09;每次打开 Chrome 浏览器&#xff0c;Chrome 自身账号以及各个网站账号都需要重新登录&#xff0c;电脑本身为家用&#xff0c;使用时间不多的情况下&#xff0c;频繁登录账号很痛苦&#xff0c;也很迷惑。现找到解决办法&#xff0c;记录…

基于SSM大学生竞赛活动平台

基于SSM大学生竞赛活动平台的设计与实现 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringSpringMVCMyBatisVue 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 前台系统主要功能实现&#xff1a;首页列表展示、自愿者招聘、竞赛新闻查…

汇编语言基础

引言 汇编语言是直接在硬件之上工作的编程语言&#xff0c;首先要了解硬件系统的结构&#xff0c;才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…