MQTT协议详解

文章介绍了物联网平台中的产品和设备概念,以及Topic在消息传输中的作用。MQTT协议的特性,如发布/订阅模式和三种服务质量(QoS0、QoS1、QoS2)被详细阐述,还解析了MQTT的CONNECT控制报文结构。此外,提到了MQTT中的订阅、主题和会话机制,以及其在解耦发布者和订阅者方面的优势。
摘要由CSDN通过智能技术生成

https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html

物联网平台下的一些名称解释

产品

设备的集合,通常指一组具有相同功能的设备。物联网平台为每个产品颁发全局唯一的ProductKey。每个产品下最多可以包含50万给设备。

设备

归属于某个产品下的具体设备。物联网平台为设备颁发产品内唯一的证书DeviceName。设备可以直接连接物联网平台,也可以作为子设备通过网关连接物联网平台。

Topic

Topic是UTF-8字符串,是发布(pub)/订阅(sub)消息的传输中介。可以向Topic发布或订阅消息。

Topic类

同一产品下不同设备的Topic集合。用 p r o d u c t k e y 和 {productkey}和 productkey{deviceName}通配一个唯一的设备,一个Topic类对一个ProductKey下所有的设备通用。

在这里插入图片描述

MQTT协议特性

  • 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
  • 有三种消息发布服务质量(QoS0、QoS1、QoS2):
    • “最多一次”,消息发布完全依赖于底层的TCP/IP网络,会发生消息丢失或者重复,这一级别可用于对采集数据要求不严格的情况;
    • “至少一次”,确保消息到达,但是消息可能会重复发生;
    • “只有一次”,确保消息只到达一次,这一级别可用于要求严格如涉及计费系统的情况,消息重复或者丢失都是不允许的。
  • 小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量;
  • 使用 Last Will和Testrament特性通知有关各方客户端异常中断的机制;
  • 允许用户动态创建主题,零运维成本;把低带宽、高延迟、不稳定的网络因素考虑在内;
  • 假设数据不可知,不强求传输数据的类型与格式,保持灵活性;
  • 官网:http://mqtt.org/

MQTT协议的中心是MQTT服务器或者代理(broker)

在这里插入图片描述

用户可以使用MQTT构建一个传感器网络,其中各种传感器都能够以其传感器独有的消息形式发布传感器值,订阅程序能够订阅不同的消息,以据此采取措施,MQTT代理将处理从发布程序到订阅程序的转发消息。MQTT服务器除了收集转发数据,还可以进行数据处理和存储,例如,实时存储共享单车车辆运行位置、电池用量、状态信息等数据,以及对总体的车辆进行计算和统筹管理,甚至为一些聊天工具提供平台的服务。

CONNECT控制报文详解

客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是 CONNECT 报文。

在一个网络连接上,客户端只能发送一次 CONNECT报文。服务端必须将客户端发送的第二个 CONNECT 报文当作协议违规处理并断开客户端的连接。

固定报头+可变报头+有效载荷

固定报头

必须存在,用于描述报文信息。里面指出是什么类型的报文,报文的等级。

在这里插入图片描述

可变报头

不一定存在。主要是看什么类型的报文,共十个字节,基本固定。

协议名

在这里插入图片描述

协议级别

在这里插入图片描述

连接标志

在这里插入图片描述

保持连接

在这里插入图片描述

有效载荷部分

这是内容。也是通信信息存放的地方。有时候还会存放一些额外的信息,如:客户ID。

有效载荷包含一个或多个编码字段。包括客户端的唯一标识符,will主题,will消息,用户名和密码。除了客户端标识外,其他的字段都是可选的,基于标志位来决定可变报头中是否需要包含这些字段。

在这里插入图片描述

*:设备名字

#:ProductKey

在线加密解密网站:http://encode.chahuo.com/

服务质量QOS

报文在发送的过程中可能存在丢失的情况,解决方式是重新发送。

服务质量就是在表示报文要分送几次

  • QOS 0:最多分发一次
  • QOS 1:至少分发一次
  • QOS 2:只分发一次

使用QOS 0 的情况较多

MQTT客户端

一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端可以:

  1. 发起和服务器的连接
  2. 发布其他客户端可能会订阅的信息;  //发布消息
  3. 订阅其它客户端发布的消息; //订阅消息
  4. 退订或删除应用程序的消息;    //退订消息
  5. 断开与服务器连接。        //断开,连接服务器

MQTT服务器

MQTT服务器以称为**“消息代理”(Broker)**,可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:

  1. 接受来自客户的网络连接;         //接受客户端连接
  2. 接受客户发布的应用信息;        //接收客户端发布的消息
  3. 处理来自客户端的订阅和退订请求;    //处理消息的订阅及退订
  4. 向订阅的客户转发应用程序消息。     //推送消息

MQTT协议中的订阅、主题、会话

MQTT主题模式:

  • MQTT是通过主题对消息进行分类的

  • 主题的本质就是一个UTF-8的字符串

  • 主题可以通过反斜杠标识多层级关系

  • 主题不需要创建,直接使用就可以了

  • 主题还可以通过通配符进行过滤

  • +可以过滤一个层级

  • 只能够出现在主题最后表示过滤任意级别的层级 举个例子:

    • building-b/floor-5:代表B楼5层的设备
    • *+/floor-5:表示任意一个楼层的5层的设备
    • building-b/:代表B楼所有的设备

MQTT中有3个角色

  • 发布者 Publisher
  • 订阅者 Subscriber
  • 代理 Broker

MQTT这种结构替代了传统的客户端/服务器模型,可以实现以下解耦:

  • 空间解耦,发布者和订阅者不需要知道对方
  • 时间解耦,发布者和订阅者不需要同时运行(离线消息)
  • 同步解耦,发布和接收都是异步通讯,无需停止任何处理
订阅(Subscription)

订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。

会话(Session)

每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。

主题名(Topic Name)

事件名称,根据订阅主题名称来匹配是否往客户端发送消息

连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。

主题筛选器(Topic Filter)

一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。

负载(Payload)–消息体

消息订阅者所具体接收的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值