视频链接: https://www.bilibili.com/video/BV1B54y1t7j5/?spm_id_from=autoNext&vd_source=b91967c499b23106586d7aa35af46413

资料链接:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-tuttorial/mqtt-tutorial/mqtt-last-will/

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_服务端

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_客户端_02

当客户端正常断开连接时,会向服务端发送DISCONNECT报文,服务端接收到该报文后,就知道,客户端是正常断开连接,而并非意外断开连接。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_服务端_03

然而,当服务端在没有收到 DISCONNECT 报文的情况下,发现客户端“心跳”停止了,这时服务端就知道客户端是意外断线了。

通过客户端软件再来举例:

正常连接时,

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_学习_04

当点击 Disconnect 后,这时软件(客户端)就会向 MQTT 服务器发送一个 DISCONNECT 数据包,在此情况下,服务端就知道客户端是正常断开连接的。然而,如果我直接关闭软件或者电脑意外关机,此时,软件(客户端)就不会向 MQTT 服务器发送 DISCONNECT 数据包,也就是说只要客户端不向 MQTT 服务器发送 DISCONNECT 数据包,那么此时就是意外断开连接。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_资料链接_05

(只有订阅了遗嘱的客户端才能在发布的客户端意外断开连接时接收到遗嘱信息。)

1、客户端如何将遗嘱消息发送给服务端

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_学习_06

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_服务端_07

下面通过 MQTT.fx 这个软件来操作下如何使用 MQTT 遗嘱,

首先,点击齿轮

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_客户端_08

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_学习_09

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_客户端_10

设置好后,点击 OK ,就设置好了。

下面,我们再打开一个 MQTT.fx 软件,当作客户端来订阅上述客户端发布的主题,但是这里有一个很重要的步骤,那就是

1、将之前设置的遗嘱内容给删除掉,因为这里是作为客户端来订阅的,所以不需要这些内容。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_客户端_11

2、点击重新生成 Client ID,这非常重要。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_资料链接_12

之后,点击 OK,就设置好了。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_资料链接_13

现在,我们将发布遗嘱的客户端意外断开(直接关闭软件),看看会有什么现象。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_资料链接_14

如果把遗嘱保留信息给勾选上 ,又会发生什么样的结果呢?

先打开一个软件并进行设置,

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_网络_15

再打开一个软件(与上面说的再打开一个软件的设置一样)

之后,我们将发布遗嘱的客户端意外断开(直接关闭软件),看看会有什么现象。

同样的也会接收到遗嘱信息。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_网络_16

现在,再打开一个软件(设置也一样,主要是重新生成 ClientID),然后再点击订阅该遗嘱主题。

会发现立刻就收到了遗嘱信息。

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_资料链接_17

而如果之前是正常断开连接的呢?

正常断开连接时并不会发送,当有其他客户端又订阅了该遗嘱信息时,还是会立刻就收到保留的遗嘱信息的,而不是等到意外断开时才收到。

最后,再来说一说 MQTT 遗嘱操作建议

Android mqtt通讯一直断开重连过会才好 mqtt异常断开_客户端_18

(具体如何演示,在后面会介绍)