首页 文章

可以将MQTT Paho客户端断开连接吗?

提问于
浏览
-2

我有一个 MQTT 客户端(让我们称之为Client-1)使用java PAHO,这是pub并且没有问题的子主题,在地球的另一边我有另一个客户端(让我们称之为SuperClient),可以公共主题作为命令为我的客户......

其中一个命令是"DISCONNECT-NOW",在我的 Client-1 中我已经实现了回调,我正确地接收到了msg,但是,当我尝试根据该命令断开连接时,我得到一个异常:

ReasonCode:32107消息:不允许使用Callback方法断开连接LocalizedMsg:不允许使用Callback方法断开连接例外:不允许使用Callback方法断开连接(32107)不允许使用Callback方法断开连接( 32107)org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31)atg.eclipse.paho.client.mqttv3.internal.ClientComms.disconnect(ClientComms.java:460)at org位于org.eclipse.paho.client.mqttv3的org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:601)的.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:632) .mqttAsyncClient.disconnect(MqttAsyncClient.java:608)atg.eclipse.paho.client.mqttv3.MqttClient.disconnect(MqttClient.java:256)at co.ve.de.MqttBroker.disconnect(MqttBroker.java:94)at co.ve.de.Implementation.lambda $ 1(Implementation.java:53)位于org.eclips的co.ve.de.MqttBroker $ 1.messageArrived(MqttBroker.java:132) e.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:475)位于org.eclipse.paho的org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379) . java.lang.Thread.run上的client.mqttv3.internal.CommsCallback.run(CommsCallback.java:183)(未知来源)

我的问题:是否有任何方法可以在不进行奇怪的长轮询的情况下从网络中异步断开连接?

谢谢!

1 回答

  • -1

    尝试在单独的线程上运行调用以断开连接 .

    messageArrived(java.lang.String topic, MqttMessage message) {
      if (disconnect){
        new Thread().run(new Runnable(){
          public void run() {
            client.disconnect();
          }
        });
      }
    }
    

相关问题