zoukankan      html  css  js  c++  java
  • MQTT断线重连订阅无法接收

    工具

    MQTT客户端是用的 paho http://www.eclipse.org/paho/

    问题

    采用以下配置

            connOpts = new MqttConnectOptions(); 
            connOpts.setCleanSession(true);
            connOpts.setConnectionTimeout(10);
            connOpts.setKeepAliveInterval(90);
            connOpts.setAutomaticReconnect(true);

    当网络断开后,客户端会进行重连,但是重连之前订阅的主题就失效了,不再接受之前订阅主题的消息。

    解决方法

    因为配置里将cleanSession 设为 true ,当客户端掉线时 ,服务器端会清除 客户端 session 。 重连后 客户端会有一个新的session。

    第一种

    把配置里的 cleanSession 设为false,客户端掉线后 服务器端不会清除session,当重连后可以接收之前订阅主题的消息。当客户端上线后会接受到它离线的这段时间的消息

    第二种

    通过查看 connect 方法的代码发现

    这里写图片描述

    如果我们设置的 callback实现了 MqttCallbackExtended接口,就会把它设置给connectActionListener,我再来看看MqttCallbackExtended接口。
    这里写图片描述

    可以看到这个接口拓展了一个方法,该方法会在连接到服务器成功时调用,正符合我们的要求。我只需要实现这个接口并在这个方法里从新订阅之前的主题就行了。

    这种方法重连之后不会收到离线期间该主题的消息

  • 相关阅读:
    一些动规题
    洛谷P1717 钓鱼
    一堆递推题
    义冢oj P5033打气球
    义冢oj P5032生理周期
    Proud Merchants HDU
    739B
    Lost Cows POJ
    并查集负值根表集合大小的写法
    [Poi2011]Tree Rotations线段树合并
  • 原文地址:https://www.cnblogs.com/A-yes/p/9894144.html
Copyright © 2011-2022 走看看