轨交综合监控数采接口技术研究(5)

其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。 MQTT传输的消息分为:主题(Topic)和负载(payload)两部分


其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为:主题(Topic)和负载(payload)两部分。

Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)

payload,可以理解为消息的内容,是指订阅者具体要使用的内容。

4.1.1 MQTT客户端

一个使用MQTT协议的应用程序或者是设备,它总是会建立到服务器的网络连接。MQTT服务器被以称之为“消息代理”(Broker),某个的应用程序或某一台设备都可能是。它是位于消息发布者和订阅者之间,它可以:接受来自客户的网络连接;接受客户发布的应用信息;处理来自客户端的订阅和退订请求;向订阅的客户转发应用程序消息。

4.1.2 MQTT协议的订阅会话与主题名

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

会话(Session):每个客户端在与服务器建立连接后都是会话。客户端、服务器之间会存在一种状态来交互。会话可能会只存在于一个网络之间,也可能跨越客户端和服务器之间的多个连续的网络连接。

主题名(Topic Name):连接到匹配服务器订阅的应用程序消息的标记。 服务器把消息发送到订阅的匹配标签中的每一个客户端。

4.2 MQTT协议方法

MQTT协议中定义了一些方法(也被称为动作), 来于表示对确定资源所进行操作。 这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。

Connect,等待与服务器建立连接

Disconnect,等待MQTT客户端完成所做的工作,并与服务器断开TCP/IP会话

Subscribe,等待完成订阅

UnSubscribe,等待服务器取消客户端的一个或多个topics订阅

Publish,MQTT客户端发送消息请求,发送完成后返回应用程序线程

4.3 MQTT数据包结构

在研究MQTT时必不可免的需要用到MQTT的数据格式。

数据包结构包括:固定头、可变头和消息体。

固定头(Fixed header),存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识

可变头(Variable header),存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容

消息体(Payload),存在于部分MQTT数据包中,表示客户端收到的具体内容

4.3.1  MQTT固定头

固定头存在于MQTT所有的数据包中,其结构如下:

表4.2.2 MQTT固定头结构

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT数据包类型 不同类型MQTT数据包的具体标识

byte 2… 剩余长度

剩余长度字段 表示可变报头的长度。对PUBREC报文它的值等于2。

4.3.2 MQTT数据包类型

位置:byte 1, bits 7-4。

相于一个4位的无符号值,类型如下

名称 值 流方向 描述

Reserved 0 不可用 保留位

CONNECT 1 客户端到服务器 客户端请求连接到服务器

CONNACK 2 服务器到客户端 连接确认

PUBLISH 3 双向 发布消息

PUBACK 4 双向 发布确认

PUBREC 5 双向 发布收到(保证第1部分到达)

PUBREL 6 双赂 发布释放(保证第2部分到达)

PUBCOMP 7 双向 发布完成(保证第3部分到达)

SUBSCRIBE 8 客户端到服务器 客户端请求订阅

SUBACK 9 服务器到客户端 订阅确认

UNSUBSCRIBE 10 客户端到服务器 请求取消订阅

UNSUBACK 11 服务器到客户端 取消订阅确认

PINGREQ 12 客户端到服务器 PING请求

名称 值 流方向 描述