转自:http://www.cnblogs.com/caca/p/mqtt.html
MQTT - MQ Telemetry Transport
- 轻量级的 machine-to-machine 通信协议。
- publish/subscribe模式。
- 基于TCP/IP。
- 支持QoS。
- 适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张。
- 是一种比较不错的Android消息推送方案。
- FacebookMessenger采用了MQTT。
- MQTT有可能成为物联网的重要协议。
消息体
MessageType
CONNECT
TCP连接建立完毕后,Client向Server发出一个Request。
如果一段时间内接收不到Server的Response,则关闭socket,重新建立一个session连接。
如果一个ClientID已经与服务器连接,则持有同样ClientID的旧有连接必须由服务器关闭后,新建立才能建立。
CONNACK
Server发出Response响应。
0x00 Connection Accepted
0x01 Connection Refused: unacceptable protocol version
0x02 Connection Refused: identifier rejected
0x03 Connection Refused: server unavailable
0x04 Connection Refused: bad user name or password
0x05 Connection Refused: not authorized
0x01 Connection Refused: unacceptable protocol version
0x02 Connection Refused: identifier rejected
0x03 Connection Refused: server unavailable
0x04 Connection Refused: bad user name or password
0x05 Connection Refused: not authorized
PUBLISH 发布消息
Client/Servier均可以进行PUBLISH。
publish message 应该包含一个TopicName(Subject/Channel),即订阅关键词。
关于Topic通配符
/:用来表示层次,比如a/b,a/b/c。
#:表示匹配>=0个层次,比如a/#就匹配a/,a/b,a/b/c。
单独的一个#表示匹配所有。
不允许 a#和a/#/c。
+:表示匹配一个层次,例如a/+匹配a/b,a/c,不匹配a/b/c。
单独的一个+是允许的,a+不允许,a/+/b不允许
PUBACK 发布消息后的确认
QoS=1时,Server向Client发布该确认(Client收到确认后删除),订阅者向Server发布确认。
PUBREC / PUBREL / PUBCOMP
QoS=2时
1. Server->Client发布PUBREC(已收到);
2. Client->Server发布PUBREL(已释放);
3. Server->Client发布PUBCOMP(已完成),Client删除msg;
订阅者也会向Server发布类似过程确认。
PINGREQ / PINGRES 心跳
Client有责任发送KeepAliveTime时长告诉给Server。在一个时长内,发送PINGREQ,Server发送PINGRES确认。
Server在1.5个时长内未收到PINGREQ,就断开连接。
Client在1个时长内未收到PINGRES,断开连接。
一般来说,时长设置为几个分钟。最大18hours,0表示一直未断开。
QoS
QoS=0:最多一次,有可能重复或丢失。
QoS=1:至少一次,有可能重复。
Client[Qos=1,DUP=0/*重复次数*/,MessageId=x] --->PUBLISH--> Server收到后,存储Message,发布,删除,向Client回发PUBACK
Client收到PUBACK后,删除Message;如果未收到PUBACK,设置DUP++,重新发送,Server端重新发布,所以有可能重复发送消息。
QoS=2:只有一次,确保消息只到达一次(用于比较严格的计费系统)。
Clean Session
如果为false(flag=0),Client断开连接后,Server应该保存Client的订阅信息。
如果为true(flag=1),表示Server应该立刻丢弃任何会话状态信息。
相关推荐
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅模式的消息传输协议,它被设计用于低带宽、高延迟或不可靠的网络环境。由于其低开销、支持一对多的消息分发特性,MQTT成为物联网(IoT)领域中...
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种广泛应用于物联网(IoT)领域的轻量级发布/订阅式网络通信协议。它的设计目标是为资源有限的设备提供高效可靠的数据传输,特别是在低带宽、高...
MQTT,全称Message Queuing Telemetry Transport,是一种轻量级的发布/订阅(Publish/Subscribe)消息协议,常用于物联网(IoT)设备之间的通信。它设计的目标是低带宽、高延迟、不可靠的网络环境,使得资源有限的...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。在C++中实现MQTT协议可以为开发者提供灵活且高效的解决方案,尤其对于资源受限的嵌入式系统。...
MQTT(MQ Telemetry Transport)协议是一种轻量级的发布/订阅式消息传输协议,特别适合于物联网(IoT)设备之间的通信。由于物联网设备通常具有网络环境不稳定、内存和存储资源有限、处理能力受限的特点,MQTT协议以...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,专为低带宽、高延迟或不可靠的网络而设计。MQTT协议的特点包括: - **小包头**:相比其他协议,MQTT包头更小,减少了网络传输...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间的通信。这个“Mqtt test测试包”可能是为了帮助开发者理解和验证MQTT协议的工作原理,或者对相关应用进行...
SIM800_MQTT-master.zip 是一个针对Arduino平台的库,主要目的是让开发者能够使用SIM800系列GSM/GPRS模块与MQTT(Message Queuing Telemetry Transport)协议进行通信。SIM800系列模块是GSM/GPRS模块,广泛应用于...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,特别适合资源有限的设备和低带宽、高延迟的网络环境。它设计的核心原则是低开销、高可靠性以及最小的基础设施需求,使得它成为物联网...
MQTT stands for MQ Telemetry Transport. It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable ...
MQ遥测传输(MQ Telemetry Transport,MQTT)是一个轻量级的基于代理的发布/订阅式消息传输协议,它的设计目标是开放、简单、轻量和易于实现。这些特征使它适用于各种受限环境,比如,但不限于: 网络代价昂贵,低...
在本文中,我们将深入探讨如何使用Python和MQTT(Message Queuing Telemetry Transport)协议来构建一个云打印客户端。MQTT是一种轻量级的发布/订阅消息协议,特别适合于物联网(IoT)设备和低带宽、高延迟或不可靠的...
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种高效、简单且易于实现的轻量级消息传输协议。它最初由Andy Stanford-Clark(来自IBM公司)和Arlen Nipper(来自Arcom公司,现更名为Eurotech)...
MQ Telemetry Transport (MQTT) is a lightweight broker-based publish/subscribe messaging protocol designed to be open, simple, lightweight and easy to implement
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,特别适合资源有限的设备,如嵌入式系统。在这个系统中,MQTT作为物联网通信的核心,使得STM32通过ESP8266将数据安全高效地传输到阿里...
**MQTT**,全称为**Message Queuing Telemetry Transport**(消息队列遥测传输协议),是一种基于**发布/订阅**模型的轻量级消息协议,适用于资源受限的环境。它的主要特点包括: - **开放性**:MQTT协议是开放的,...
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,最初设计用于远程位置的低带宽、高延迟或不可靠网络通信。它非常适合物联网(IoT)设备,因为它的设计目标是高效、可靠且易于实现。...
OneNet是中移物联网有限公司提供的开放云服务平台,支持MQTT(Message Queuing Telemetry Transport)协议,用于设备和云端的数据交互。 STM32F103C8T6是意法半导体公司生产的一款基于ARM Cortex-M3内核的微控制器...
MQ遥测传输(MQ Telemetry Transport,简称MQTT)是一种高效、简单的消息传输协议,它最初由IBM和Eurotech共同开发并公开发布。该协议的设计初衷是为了解决受限环境下的数据通信问题,如移动网络、卫星网络以及其他...
mqtt 测试工具,MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议 使用场景: 1、不可靠、网络带宽小的网络 2、运行的设备CPU、内存非常有限 特点: 1、基于发布/订阅模型的协议 2、他是二进制协议,...