一、介绍
MQTT是一种基于发布/订阅模式轻量级通讯协议。MQTT最大优点在于用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT 与 HTTP 一样,MQTT 运行在传输控制协议/互联网协议 (TCP/IP) 堆栈之上。
二、发布和订阅
发布和订阅:MQTT使用的发布、订阅消息模式、它提供了一对多的消息分发机制,从而实现与应用程序的解耦。这是一种消息传递模式。消息部署直接从发送器发送到接收器,而是由MQTT server分发的。
客户端可以发布消息也可以订阅消息或者两者兼而有之。
客户端(也称为节点)是一种智能设备,如微控制器或具有 TCP/IP 堆栈和实现 MQTT 协议的软件的计算机。
消息在允许过滤的主题下发布。主题是分层划分的 UTF-8 字符串。不同的主题级别用斜杠/
作为分隔符号。
三、Qos级别
服务质量是 MQTT 的一个重要特性。当我们使用 TCP/IP 时,连接已经在一定程度上受到保护。但是在无线网络中,中断和干扰很频繁,MQTT 在这里帮助避免信息丢失及其服务质量水平。这些级别在发布时使用。如果客户端发布到 MQTT 服务器,则客户端将是发送者,MQTT 服务器将是接收者。当MQTT服务器向客户端发布消息时,服务器是发送者,客户端是接收者。
Qos 0
这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。
Qos 1
Qos 1承诺消息将至少传送一次给订阅者。
QoS 2
使用Qos2我们保证消息仅传送到目的地一次。为此带有唯一消息ID的消息会存储两次,首先来自发送者,然后是接收者。QoS 级别 2 在网络中具有最高的开销,因为在发送方和接收方之间需要两个流。
四、MQTT数据包结构
固定头:存在于所有MQTT
数据包中,表示数据包类型及数据包的分组类标识;
可变头:存在于部分MQTT
数据包中,数据包类型决定了可变头是否存在及其具体内容;
消息体:存在于部分MQTT
数据包中,表示客户端收到的具体内容;
Payload消息体是MQTT数据包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息 有消息体:
Payload消息体
CONNECT,消息体内容主要是:客户端的ClientID、订阅的Topic、Message以及用户名和密码
SUBSCRIBE,消息体内容是一系列的要订阅的主题以及QoS。
SUBACK,消息体内容是服务器对于SUBSCRIBE所申请的主题及QoS进行确认和回复。
UNSUBSCRIBE,消息体内容是要订阅的主题。