2017-03-08 47 views
-2

我有一个MQTT客户端(让我们称之为Client-1)使用Java PAHO,这是酒吧和子主题没有问题, 在地球的另一端我有另一个客户端(让我们称之为SuperClient)可以公共主题作为我的客户命令...可以在MQTT泛美卫生组织客户端断开非同步?

其中一个命令是“DISCONNECT-NOW”,在我的客户端-1我已经实现了回调,我正确收到msg,但是,当我尝试根据该命令断开连接,我得到一个例外:

ReasonCode:32107

消息:使用回调法断开不允许

LocalizedMsg:使用回调法断开不允许

例外:使用回调法断开不允许(32107)

使用回调法断开不允许(32107)

在org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31) 在 org.eclipse.paho.client.mqttv3.internal.ClientComms.disconnect(ClientComms.java:460) 在 org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:632) 在 有机.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:601) 在 org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:608) 在 org.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)在 co.ve.de.MqttBroker $ 1.messageArrived(MqttBroker.java:132)在 org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:475) at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379) at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:183) 在java.lang.Thread.run(来源不明)

我的问题:有没有什么办法从网络上断开异步没有做一些奇怪的长轮询?

谢谢!

回答

-1

试运行的呼叫断开一个单独的线程。

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