MQTT的介绍与模型理解

文章目录[x]
  1. 0.1:简述
  2. 0.2:通信模式
  3. 1:MQTT服务端
  4. 2:MQTT客户端
  5. 3:MQTT主题
  6. 4:MQTT 发布/订阅 特性

写上一篇博客时候忽然感觉理解迟钝,就先来补一下mqtt的知识。

一、MQTT简介

简述

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

  • 易于实现
  • 数据传输的服务质量可控
  • 占用带宽小
  • 传输数据内容不可预知
  • 设备连接状态可知

从以上几点不难看出,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的。

通信模式

服务器端: MQTT服务器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等,我们主要研究Mosquitto。图一的Broker和图二的“代理”都属于服务器端,负责处理客户端的网络连接和订阅等请求。
客户端: Publisher和Subscriber都属于客户端,连接服务器端进行发布/订阅消息。
从上面图片可以看到,topic可以理解成主题/消息类型,payload可以理解为消息内容。那么从图二就可以很容易理解它的通信模式。订阅者先是订阅了topic主题的消息,而当发布端发布了topic主题的消息payload就会经过代理(服务器端)的“筛选”转发给匹配的topic的订阅者。
在这里插入图片描述在这里插入图片描述

 

MQTT版本

目前MQTT主流版本有两个,分别是MQTT3.1.1和MQTT5。MQTT5是在MQTT3.1.1的基础上进行了升级。因此MQTT5是完全兼容MQTT3.1.1的。而MQTT5是在MQTT3.1.1的基础上添加了更多的功能补充完善MQTT协议。

将会重点学习MQTT3.1.1,这么做有几点原因:

  1. MQTT3.1.1是MQTT5的基础,因此掌握了MQTT3.1.1后可以通过进一步学习掌握MQTT5的使用。
  2. 当前多种流行编程语言的MQTT客户端库仍然只支持MQTT3.1.1,而不支持MQTT5。
  3. 目前物联网环境中的大量设备仍然使用MQTT3.1.1协议而不支持MQTT5协议。

二、MQTT基本原理

在MQTT协议通讯中,有两个最为重要的角色。它们分别是服务端客户端。首先我们来初步了解一下它们。

MQTT服务端

MQTT服务端通常是一台服务器。它是MQTT信息传输的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。MQTT服务端还负责管理MQTT客户端。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接收准确投递

MQTT客户端

MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。我们把客户端发送信息的行为成为“发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。“订阅”信息这一操作很像我们在视频网站订阅某一部电视剧。当这部电视剧上新后,视频网站会向订阅了该剧的用户发送信息,告诉他们有新剧上线了。

MQTT客户端在通讯时,往往角色不是单一的。它既可以作为信息发布者也可以同时作为信息订阅者。

MQTT主题

刚刚我们在讲解MQTT客户端订阅信息时,使用了用户在视频网站订阅电视剧这个例子。在MQTT通讯中,客户端所订阅的肯定不是一部部电视剧,而是一个个“主题”。MQTT服务端在管理MQTT信息通讯时,就是使用“主题”来控制的。

MQTT 发布/订阅 特性

MQTT通讯的核心枢纽是MQTT服务端。有了服务端对MQTT信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相互独立,且在空间上可以分离,时间上可以异步。这里所说的相互独立、空间和时间分离具体指的是什么呢?

  • 相互可独立:MQTT客户端是一个个独立的个体。它们无需了解彼此的存在,依然可以实现信息交流。大家只要订阅了“汽车速度”主题,MQTT服务端就会在每次收到新信息时,将信息发送给订阅了“汽车速度”主题的客户端。
  • 空间可分离:空间分离相对容易理解,MQTT客户端在通讯比要条件是连接到了同一个MQTT通讯网络。这个网络可以是互联网或者局域网。只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流。
  • 时间可异步:MQTT客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要。有时物联网设备会发生意外离线的情况。我们使用以上实例二的场景来作为示例。当我们的汽车在行驶过程中,可能会突然进入隧道,这时汽车可能会断开与MQTT服务端的连接。假设在此时我们的手机客户端向汽车客户端所订阅的“空调温度”主题发布了信息,而汽车恰恰不在线。这时,MQTT服务端可以将“空调温度”主题的新信息保存,待汽车再次上线后,服务端再将“空调温度”信息推送给汽车。

以上总结的几个特点中都有一个“可”字。这个“可”字意味着客户端彼此之间可以独立,空间可以分离,时间可以异步。在我们实际应用中,客户端之间的关系既可以独立也可以相互依存。在空间上,既可以相距甚远,也可以彼此相邻。在时间上,既可以异步也可以同步。这个“可”字所体现的是MQTT通讯的灵活性。

MQTT协议通信过程(图)

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像