MQTT 通信过程 | 学习笔记

简介: 快速学习 MQTT 通信过程

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:MQTT 通信过程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/665/detail/11174


MQTT 通信过程

内容简介:

一、服务端的含义及用途

二、客户端的分类及用途

三、QoS 0,Qos1,QoS2 消息服务质量的通讯过程

四、客户端接收消息是否需要已订阅客户端在线

 

一、服务端的含义及用途

根据之前讲的协议,数据包的格式来分析通信的具体过程。讲解有效的数据载荷根据连接标志,可以参考数据手册。通信过程回顾三个角色的作用或者是三个角色的任务。首先对于服务端来说,服务端可以是一个程序或设备,通常情况下应该是一个服务器的程序,作为发送消息的客户端和请求订阅的客户端之间的中介。所以把它叫做 Broker。服务端还能接受来自客户端的网络连接,接受客户端发布的应用消息,处理客户端的订阅和取消订阅请求,并且转发应用消息给符合条件的已订阅客户端。这是服务端的用途。

 

二、客户端的分类及用途

客户端分为两种:一种是消息发送客户端一种是订阅客户端。客户端通常是终端设备,客户端总是通过网络连接到服务端。服务端一直是运行的,服务器如果是断掉的话,客户端是连接不上的,客户端发的消息也不会被保存。这属于时间上的解耦 ,但前提是服务器不能断开, 所以服务器一直处于运行状态。那么它可以发布应用消息给其它客户端,它也可以请求接收相关的其它发的消息以主题为中心,还可以取消订阅从而来移除对某些消息的接收请求,并且还可以从服务器断开。

 

三、QoS 0,Qos1,QoS2 消息服务质量的通讯过程

1、QoS 0 消息服务质量的通讯过程

其次主要是学习这三种消息服务质量的通讯过程,分别是 QoS 0,Qos1,QoS2。它们不一样的地方,很好理解。对于我们第一种服务质量,就是发送数据,客户端直接通过 PUBLISH 把主题加内容发给了服务器,但是这里面有一个问题就是服务器在不在,服务器能不能收到,服务器能不能把数据给到客户端。这些都是未知的。所以说这个导致的结果就是服务器最多收到一次,不能说服务器,应该说是其它客户端,对于发布的这个消息最多可能收到一次。

2、Qos1 消息服务质量的通讯过程

第二个就是把消息发出去了,也就是主题加内容,那么必须发完了等待服务器的一个应答  就是说服务器必须给一个应答 。如果没有等到这个应答的话,可能还会再发送一次。到底之间接收到多少次应答,根据网络环境是不确定的,但是只有接收到应答之后才可以结束,所以导致的结果就是这个服务器有可能会多次转换,也就是导致这个客户端收到至少一次这个消息,记住是至少一次。那么这其实对于开关量,比如说把某个阀门打开,这个操作也就可以用这种至少一次,就是一次没打开那再开一次也无所谓,所以说这种就属于 QoS 1。

3、QoS2 消息服务质量的通讯过程最后一种,就是叫做仅有一次。那么也就是说这个过程的话是首先把主题和消息发给这个服务器,服务器说 Record 就是应答的记录,其实就是指的是把发的消息已经记录下来。客户端已经记录下来了,那它还会回一个把消息释放的信号,服务器就接收了。在服务器收到之后服务器就回一个,消息发布完成,那么 MQTT Client 的任务结束。

image.png

 

四、客户端接收消息是否需要已订阅客户端在线

Qos2 里面的机制没有研究过,其实这个过程完成了之后,客户端是否收到能够接受消息,如果没有上线,那么这四个来回是不是能正常完成,还是必须上线,这个问题其实毋庸置疑,既然讲到 MQTT 通讯的三大解耦,其中一个就是讲不必在线,也就意味着订阅主题的客户端,它可以不在线,而这四次通信过程完全是发布方跟服务器之间完成。也就是认为 POBCOMP 这个动作已经完成了。但是这个客户端根本没有订阅到这个消息。如果说客户端起来之后,其实服务器跟客户端之间还要经过类似的多次交互,也是差不多四次这样的过程,把数据给到订阅端。所以这个四次不只发生在发布者和服务器,同时也发生在订阅者和服务器之间,所以不能认为 Qos2 过程复杂,最后直接订阅,那订阅之后没有收到,所以说它是同样的遵循这样一个过程。

 

五、MQTT 协议给生活带来的便利

最后总结一下整个过程,设备端可以是独立的设备,当然是带上网能力的设备,直接通过自己的 MQTT 客户端协议就可以连接到服务器,如果终端不具备上网能力,比如一些低功耗设备 ,需要把这些传达网络数据收集起来,通过一个网关,网关具有上网的能力,而且网关建了一个上网,那它就可以运行 MQTT 的客户端的程序,就会把数据再次交给服务器,服务器拿到数据之后,就可以去做各种应用。但是这个应用完全取决于传单网络数据类型,即传单网络具体的应用场景,到底是汽车里面还是智慧城市还是属于工业还是智能家居包括医疗,就可以对这些数据做很多的处理,比如说曲线图,柱状图,笔状图,还有热烈图,包括对数据的历史分析、特征抓取,甚至是数据挖掘。这就是应用层可以去做的工作。这是 MQTT 协议带来的便利。

image.png

那么有关协议的数据传输过程就结束。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2天前
|
消息中间件 Java 中间件
详解rocketMq通信模块&升级构想(上)
详解rocketMq通信模块&升级构想(上)
167 0
|
2天前
|
消息中间件 Java 应用服务中间件
详解rocketMq通信模块&升级构想(下)
详解rocketMq通信模块&升级构想(下)
400 0
详解rocketMq通信模块&升级构想(下)
|
8月前
|
存储 网络协议 物联网
Android集成MQTT教程:实现高效通信和实时消息传输
Android集成MQTT教程:实现高效通信和实时消息传输
809 0
|
9月前
|
物联网 Java Linux
Linux安装与配置Eclipse Paho库:实现MQTT通信
Eclipse Paho是一个开源的MQTT(Message Queuing Telemetry Transport)实现,提供了多种编程语言的客户端库,包括C、C++、Java、Python等。在Linux系统中,通过安装和配置Eclipse Paho库,我们可以方便地实现MQTT通信功能。本文将详细介绍在Linux系统中安装和配置Eclipse Paho库的步骤,以便于开发者在物联网项目中使用MQTT协议进行通信。
731 0
|
6月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
328 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
9月前
|
传感器 网络协议 物联网
Linux MQTT通信:实现轻量级物联网传输协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的物联网传输协议,专门设计用于低带宽、不稳定网络环境下的传感器和物联网设备通信。本文将深入探讨Linux环境下如何实现MQTT通信,介绍MQTT协议的基本原理、常用MQTT库以及如何在Linux系统中编写MQTT客户端和服务器端程序。
473 0
|
2天前
|
消息中间件 存储 算法
RocketMQ学习笔记
RocketMQ学习笔记
74 0
|
2天前
|
传感器 网络协议 中间件
Mqtt学习笔记--交叉编译移植(1)
Mqtt学习笔记--交叉编译移植(1)
23 0
|
2天前
|
消息中间件 缓存 API
|
7月前
|
消息中间件 中间件 Kafka
RocketMQ源码(一)RocketMQ消息生产及消费通信链路源码分析
**RocketMQ**的核心架构主要分为Broker、Producer、Consumer,通过阅读源码看到他们之间是通过Netty来通信的 ,具体来说Broker端是**Netty服务器**用来负责与客户端的连接请求处理,而Producer/Consumer端是**Netty客户端**用来负责与Netty服务器的通信及请求响应处理。
160 1