2017-08-01 16 views
-1

モバイルアプリケーションがアプリケーションによってホストされたAPIを呼び出すシナリオがあります。このプロセスでは、MQTTを介してダウンストリーム・システムにメッセージを送信し、そのメッセージに対する応答が得られるまで待つ必要があります。そして、私はモバイルアプリに返信しました。Pahoクライアントを使用した同期MQTT通信

ここでの課題は、MQTを介したメッセージングが非同期であることです。したがって、私が受け取ったメッセージは、別のスレッド(いくつかのリスナークラス、messageArrived()でリスニング)になります。 httpスレッドを呼び出す方法に戻るには?

Pahoライブラリで同期通信をサポートしていますか?私はメッセージを送信し、トピックを開いて、メッセージが受信されるかタイムアウトになるまで待ちますか?

+0

このタイプの質問は2日後に尋ねられました(https://stackoverflow.com/questions/45413507/handling-mqtt-communication-inside-http-request-in-node-red)。何かの譲渡のために起こることはありませんか? – hardillb

+0

[Node-RedでHTTPリクエスト内のMQTT通信を処理する]の可能な複製(https://stackoverflow.com/questions/45413507/handling-mqtt-communication-inside-http-request-in-node-red) –

+0

これは重複していないか、私はそれを1とマークしたでしょう。 1つはNode-REDに特有のものであり、これは最も可能性の高いjavaに類似のものを実装することに関するものです。 – hardillb

答えて

-1

MQTTは、すべてのPub/Sub実装と同じように非同期です。プロトコルレベルでのメッセージへの返信の概念はないので、公開されたメッセージにも応答が得られるかどうかを知る方法はありません。あなたが公開しているトピックへの加入者。

このように動作するシステムを構築することは可能ですが、すべての飛行要求のステートマシンを維持し、賢明なタイムアウトポリシーを実装し、複数の応答を受け取った場合の対処方法を検討する必要があります。

あなたは使用しているPahoライブラリの中には言及していませんが、メソッド名からJavaを推測していますが、使用しているHTTPフレームワークやその他の要因特に、ポーリングと同期の多くが必要になるため、解決策を提案します。

モバイル・アプリケーションがMQTTトピックを直接パブリッシュしてサブスクライブできない理由はありますか?これはこれの必要性を取り除くでしょう。

関連する問題