5

Eclipse Paho ページにある最新の jar を使用して、Android アプリケーションで MQTT を使用しています。

QOS 1 でときどきパブリッシュを送信して接続を手動でチェックしています。特定のタイムアウトで配信されない場合は、MQTT を切断して再接続します。データ接続が失われてから回復した場合、再接続も強制します。

問題は、切断メソッドがスレッドをハングさせ、タイムアウトがゼロまたは負の値であっても完了しないことです。30 秒の内部タイムアウトがあるはずですが、これをはるかに超えて完了しません。

MqttClient オブジェクトを切断する必要があります。切断しないと、バックグラウンドでデータを処理しています。私が今していることは、別のスレッドをスピンオフして MQTT を切断し、新しい MqttClient を完全に作成することです。データの使用を停止しますが、代わりに新しいスレッドがハングするだけなので、これは悪い解決策です。

何か案は?

編集:さらに調査すると、70行目でCommsReceiverを停止しようとするとブロックされているようです:

public void stop() throws IOException {
    synchronized (lifecycle) {
        //@TRACE 850=stopping receiver
        trace.trace(Trace.FINE,850);
        if (running) {
            running = false;
            try {
                //@TRACE 851=stop: wait on lifecycle
                trace.trace(Trace.FINE,851);
                // Wait for the thread to finish.
                lifecycle.wait(); // THREAD HANGS //
            }
            catch (InterruptedException ex) {
            }
        }
    }
}
4

2 に答える 2

4

問題は、paho リポジトリの開発ブランチでコードを使用する場合、paho クライアントの安定版のタイミング ウィンドウが原因です。このバグhttps://bugs.eclipse.org/bugs/show_bug.cgi?id=394066で修正済みとしてマークされているため、この問題に遭遇するべきではありません信頼性のある。

于 2013-08-07T14:07:32.097 に答える
2

ここにバグが報告されています: https://bugs.eclipse.org/bugs/show_bug.cgi?id=394066 (おそらくこの質問の OP、@Vipul の情報)。ステータスは解決済みと表示されるので、新しい JAR が修正と共に利用可能になる時期を確認し、それを使用します。

于 2013-08-04T04:38:30.607 に答える