2017-03-08 31 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(); 
     } 
    }); 
    } 
} 
相關問題