本帖最后由 lxg 于 2019-6-29 15:04 编辑
MQTT 接收离线消息
MQTT实现方式:发布者: 发布消息 代理 : 推送消息 订阅者: 订阅消息 接收消息 MQTT是基于TCP/IP协议栈,因此只要支持TCP/IP,都可以使用MQTT.
MQTT消息格式MQTT的消息格式是由固定报文头,可变报文头,有效负荷组成,格式如下所示: 固定报文头 | 可变报文头 | 有效负荷
固定报文头固定报文头最少有两个字节,第一个字节包括MQTT消息类型和Qos级别,第二个字节为剩余长度(可变报文头和有效负荷的总长度)。
可变报文头可变报文头包含一个报文标识符(packet id)
有效负荷有效负荷(payload) 才是真正的数据,当消息类型为订阅消息时,有效负荷才是真正的订阅的数据。 有效负荷长度计算: 固定报文头里的剩余长度 - 可变报文长度
MQTT服务质量MQTT有三种服务质量 Qos0: 最多一次,这一级别会发生消息丢失 Qos1: 至少一次,确保消息到达。 Qos2: 只有一次,确保消息只有一次到达
MQTT保活机制MQTT可以设置keepAliveInterval(心跳间隔),客户端在心跳间隔期间发送PINGREQ消息,服务端返回PINGRESP消息,如果客户端超过1.5倍心跳间隔时间还没有发送PINGREQ消息,服务器会主动断开连接。
遗愿标志(will flag)遗愿标志(will flag) 被设置为1时,当客户端连接关闭时,服务端会发布遗愿消息。
CleanSessionCleanSession 是确保客户端接收离线消息的关键属性,CleanSession 设置为True时,服务端将不会保存会话,当客户端断开连接时,会丢弃中途的所有消息。 当CleanSession设置为False时,服务端将保存持久会话,当客户端断开连接时,服务端将会保存这段时间内接收的消息,等到客户端再次连接时,服务端将推送这些消息到服务端。 注意事项:使用CleanSession=False功能时,要保证ClientID唯一性,不能将ClientID设为随机数。
windows平台的MQTT调试工具windows平台的用户可以使用MQTTBOX这个软件进行测试, 可以很方便的模拟订阅者和发布者进行发送和接受数据。
常用的MQTT测试连接
mqtt://iot.eclipse.org MQTT over TCP, default port 1883:
mqtt://iot.eclipse.org:1884 MQTT over TCP, port 1884:
mqtts://iot.eclipse.org MQTT over SSL, port 8883
mqtts://iot.eclipse.org:8884 MQTT over SSL, port 8884
|