2017-03-08 23 views
-2

私はMQTTクライアントは(これをClient-1と呼ぶことができます)Java PAHOを使用しています。これは問題なくパブとサブトピックです。地球の反対側の 私は別のクライアント(SuperClientと呼ぶことができます)私のクライアントのためのコマンドなどの公共のトピックすることができます...MQTT Pahoクライアントを非同期に切断できますか?

これらのコマンドの一つは、私がしようとすると、私のクライアント-1で、私は、しかし、私は正しくそのMSGを受け取るコールバックを実装している、「DISCONNECT-NOW」でありますそのコマンドに応じて切断する例外:

理由コード:32107

メッセージ:コールバック・メソッドを使用して切断することは許可されていない

LocalizedMsg:コールバック・メソッドを使用して切断することは許可されていない

例外

:コールバック・メソッドを使用して切断が許可されていない(32107)

コールバック・メソッドを使用して切断

はでorg.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:31) で(32107)

を許可されていませんorg.eclipse.paho.client.mqttv3.internal.ClientComms.disconnect(ClientComms.java:460) でorg.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:632) ORGで org.eclipse.pahoで.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect org.eclipse.paho.client.mqttv3.MqttAsyncClient.disconnect(MqttAsyncClient.java:608)で(MqttAsyncClient.java:601) .client.mqttv3.MqttClient.disconnect(MqttClient.java:256) at co.ve.de.MqttBroker.disconnect(MqttBroker.java:94) co.ve.de.Implementation.lambda $ 1(Implementation.java: 53)at co.ve.de.MqttBroker $ 1.messageArrived(MqttBroker.java:132)at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379)で(CommsCallback.java:475) で 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(); 
     } 
    }); 
    } 
} 
関連する問題