【MQTT基础篇(二)】MQTT基础
文章目录
- MQTT基础
- 1 MQTT服务端
- 2 MQTT客户端
- 3 MQTT主题
- 4 MQTT 发布/订阅 特性
MQTT基础
在MQTT协议通讯中,有两个最为重要的角色。它们分别是服务端和客户端。
1 MQTT服务端
MQTT服务端通常是一台
服务器
。它是MQTT信息传输
的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。MQTT服务端还负责管理MQTT客户端。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接收和准确投递。
2 MQTT客户端
MQTT客户端可以
向服务端发布信息
,也可以从服务端收取信息
。我们把客户端发送信息的行为成为“发布
”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅
”信息。“订阅”信息这一操作很像我们在视频网站订阅某一部电视剧。当这部电视剧上新后,视频网站会向订阅了该剧的用户发送信息,告诉他们有新剧上线了。
3 MQTT主题
刚刚我们在讲解MQTT客户端订阅信息时,使用了用户在视频网站订阅电视剧这个例子。在MQTT通讯中,客户端所订阅的肯定不是一部部电视剧,而是一个个“
主题
”。MQTT服务端在管理MQTT信息通讯时,就是使用“主题
”来控制的。
为了便于您更好理解服务端是如何通过主题来控制客户端之间的信息通讯,我们来看看下图实例:
在以上图示中一共有三个MQTT客户端
。它们分别是汽车,手机和电脑。MQTT服务端
在管理MQTT
通讯时使用了“主题
”来对信息进行管理的。比如上图所示,假设我们需要利用手机和电脑获取汽车的速度,那么我们首先要利用电脑和手机向MQTT服务器
订阅主题
“汽车速度”。接下来,当汽车客户端向服务端的“汽车速度”主题发布信息后,服务端就会首先检查以下都有哪些客户端订阅了“汽车速度”这一主题的信息。当它发现订阅了该主题的客户端有一个手机和一个电脑,于是服务端就会将刚刚收到的“汽车速度”信息转发给订阅了该主题的手机和电脑客户端。
在以上实例中,汽车是“汽车速度”主题的发布者
,而手机和电脑则是该主题的订阅者
。
值得注意的是,MQTT客户端在通讯时,往往角色不是单一的。它既可以作为信息发布者也可以同时作为信息订阅者。如下图所示:
上图中的所有客户端
都是围绕“空调温度”这一主题进行通讯的。对于“空调温度”这一主题,手机和电脑客户端成为了MQTT信息的发布者
而汽车则成为了MQTT信息的订阅者
(接收者)。
可以看到,针对不同的主题,MQTT客户端可以切换自己的角色。它们可能对主题A来说是信息发布者,但是对于主题B就成了信息订阅者。
4 MQTT 发布/订阅 特性
从以上实例我们可以看到,MQTT通讯的
核心枢纽
是MQTT服务端
。有了服务端对MQTT信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相互独立,且在空间上可以分离,时间上可以异步。这里所说的相互独立、空间和时间分离具体指的是什么呢?
- 相互可独立:MQTT客户端是一个个独立的个体。它们无需了解彼此的存在,依然可以实现信息交流。比如以上实例中汽车客户端在发布“汽车速度”信息时,汽车客户端本身可以完全不知道有多少个MQTT客户端订阅了“汽车速度”这一主题。而订阅了“汽车速度”主题的手机和电脑客户端也完全不知道彼此的存在。大家只要订阅了“汽车速度”主题,MQTT服务端就会在每次收到新信息时,将信息发送给订阅了“汽车速度”主题的客户端。
- 空间可分离:空间分离相对容易理解,MQTT客户端在通讯必要条件是连接到了同一个MQTT通讯网络。这个网络可以是互联网或者局域网。只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流。
- 时间可异步:MQTT客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要。有时物联网设备会发生意外离线的情况。我们使用以上实例二的场景来作为示例。当我们的汽车在行驶过程中,可能会突然进入隧道,这时汽车可能会断开与MQTT服务端的连接。假设在此时我们的手机客户端向汽车客户端所订阅的“空调温度”主题发布了信息,而汽车恰恰不在线。这时,MQTT服务端可以将“空调温度”主题的新信息保存,待汽车再次上线后,服务端再将“空调温度”信息推送给汽车。
以上几点概括了MQTT通讯时客户端的相互关系以及服务端在其中所起的作用。讲到这里请您注意:以上总结的几个特点中都有一个“可”字。这个“可”字意味着客户端彼此之间可以独立,空间可以分离,时间可以异步。在我们实际应用中,客户端之间的关系既可以独立也可以相互依存。在空间上,既可以相距甚远,也可以彼此相邻。在时间上,既可以异步也可以同步。这个“可”字所体现的是MQTT通讯的灵活性。
内容来自 -----> 太极创客
详情可见太极创客官网,内有Arduino、ESP32等详细教程
【MQTT基础篇(二)】MQTT基础相关推荐
- mysql 基础篇(二) 账号、权限管理
mysql 基础篇(二) 账号.权限管理.备份与还原 建立账号密码: Grant all on test.* to "cj"@"localhost" ident ...
- 用Kotlin撸一个图片压缩插件-插件基础篇(二)
简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...
- vue实战入门基础篇二:从零开始仿门户网站实例-开发框架搭建
上一篇:vue实战入门基础篇一:从零开始仿门户网站实例-前期准备工作 vue实战入门基础篇二:从零开始仿门户网-2022-2-23 21:00:27 一.目录 第一篇:前期准备工作 第二篇:开发框架搭 ...
- 【基础篇】C#基础知识——面向对象
[基础篇]C#基础知识--面向对象 第一章 C#基础知识--入门 第二章 C#基础知识--面向对象 文章目录 [基础篇]C#基础知识--面向对象 前言 一.C#面向对象的特性 二.命名空间 2.1 n ...
- MySQ快速基础篇_MySQL数据库基础
MySQ快速基础篇_MySQL数据库基础 文章目录 MySQ快速基础篇_MySQL数据库基础 MySQL数据库基础 学习目录 学习目标 一.数据库概述 1.数据库介绍 2.数据库分类 ☆ 关系型数据库 ...
- 产品经理基础篇 之 产品基础技能
产品经理基础篇 之 产品基础技能 一.文档 1.BRD(Business Requirements Document,商业需求文档):市场分析.营销策略.盈利预测--给老板看的商业计划PPT,短小精悍 ...
- java玩转区块链-基础篇-solidity语法-基础类型
java玩转区块链-基础篇-solidity语法-基础类型 java环境配置 代码准备 maven 完整solidity 执行步骤 基础类型 布尔类型 类型标识: 字面常量值: 运算符: 短路规则: ...
- WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用
从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用 目录 1 ...
- 字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)
标识符 标识符:是指在程序中自己定义的内容,如类名.方法名.变量名等等. 命名规则:是有硬性要求的 关键字:是指Java已经定义好的单词,具有特殊含义,比如public.static.class.vo ...
- 02 MSC类设备-基础篇(二)
上一篇: https://blog.csdn.net/qq_40088639/article/details/110489923 四.Bulk-Only Transport协议传输模型 分析BusHo ...
最新文章
- RubyMine 2018.3.5 发布,流行的 Ruby 开发工具
- System.getProperty()参数大全
- windows git安装到把项目推送到github
- 软件测试矩阵,什么是过程/数据矩阵(U/C矩阵)?
- VTK:几何对象之Hexahedron
- python如何使用文件_Python的文件操作
- 可视化编码_编码:可视化位图
- 【转载】MongoDB 1000W级数据 Insert和Query和Delete性能测试
- 开始nodejs+express的学习+实践(8)
- 苹果cmsv10自适应卡通动漫番剧模板
- java wait 释放_Java:wait()从同步块释放锁
- linux串口程序不能,在uclinux下编写串口通信程序,COM2只能发送数据不能接收,是怎么回事呢?...
- entry在java的用处_JAVA问题:Map.Entry的一般用处是什么?
- JQuery简要介绍(转)
- 古体字与简体字对照表_简体字繁体字对照表
- HTTP方式文件分片断点下载
- u盘修复计算机系统,U盘启动盘修复win10系统的详细步骤
- 安卓游戏等待服务器响应时间,电竞显示器响应时间原理及最佳游戏设置方法
- jpa 人大金仓数据库方言_KDC——人大金仓数据库比对工具
- permissionerror winerror 5 拒绝访问。