問題タブ [mosquitto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mqtt - Paho サンプル pub/sub アプリでエンドツーエンドのレイテンシを測定する
私の目的は、MQTT デバイス間のメッセージ レイテンシ (スループットではない) を測定することであり、コード ハックに関するフィードバックを探しています。セットアップは簡単です。2 つのエンドポイントとして機能する 1 つのデバイス (2 つのターミナル セッションを備えた古い Linux PC。1 つはサブスクライバーを実行し、もう 1 つはパブリッシャー サンプル アプリを実行) と のデフォルト ブローカーtcp://m2m.eclipse.org:1883
)。src/samples
フォルダの C 言語パブリッシュ/サブスクライブ サンプル アプリに、タイム キャプチャ コード フラグメントを挿入しました。
以下、変更点です。フィードバックをお寄せください。
サブスクライブ サンプル アプリの変更点MQTTAsync_subscribe.c
( )
msgarrvd
(メッセージが到着しました) 関数の先頭に以下の行を挿入しました
パブリッシュ サンプル アプリへの変更MQTTAsync_publish.c
( )
onSend
(callback) 関数の先頭に以下の行を挿入しました
これらの変更により (パブリッシャーで配信が確認された時刻からメッセージがサブスクライバーに到着した時刻を差し引いた後)、1 ミリ秒から 0.5 ミリ秒の間の時間が得られます。
質問
これはレイテンシーの大まかなベンチマークとして意味がありますか?
これは往復時間ですか?
往復時間は適切な球場でしょうか? 少ないほうがいい?もっと?
一方通行の時間ですか?
別の方法でレイテンシ ベンチマークを設計する必要がありますか? 大まかな測定が必要です(XMPPと比較しています)。
デフォルトの QoS 値 (1) を使用しています。変更する必要がありますか?
パブリッシャーが接続 (および切断) するのに一定の時間がかかります。これらを追加する必要がありますか?
java - Android - ネットワーク接続が変更されると、Paho Mqtt クライアントがメッセージを受信しません (モバイル データが無効になり、再度有効になります)。
Mosquitto Mqtt と paho API を使用して、Android デバイスでプッシュ メッセージを受信しています。しかし、ネットワーク接続が変更されるとすぐに、メッセージの受信が停止します。簡単なテスト ケースで問題を再現する手順は次のとおりです。
1) 簡単なアクティビティを作成します。
2) アクティビティの起動時に、paho API を介して mosquitto テスト サーバー (test.mosquitto.org:1883) に接続します。
3) トピックを購読します。
4) トピックにメッセージを発行します。
結果: Mqtt クライアントは、トピックに発行されたすべてのメッセージを受信します。今
5) モバイルのインターネット接続を無効にする (モバイルデータ)
6) トピックにメッセージを発行します。
7) インターネットに再接続します。
結果:クライアントは、インターネット接続が無効になった後に公開されたメッセージを受け取りません。
KeepAliveIntervalは高い値 (30 分) に保たれているため、インターネットに再接続した後、すべてのメッセージを受信する必要があります。
同じユース ケース (同じコード) は、ラップトップでインターネットを無効にしてユース ケースを実行する単純な Java プロジェクト (Android 以外) で機能しています。
Androidデバイスで動作しない理由はありますか??? 何か不足していますか?
ノート:
1) mqtt-client-0.4.1 の使用
2) Android ターゲット API レベル 11
3) テスト中にデバイスをスリープ モードにしない。
4) connectionLost コールバックで呼び出しを取得せず、mqtt コールバックの 4 つのスレッドすべてがテスト ケース全体で実行されています。つまり、mosquitto サーバーへの接続はそのままです。
migration - Mosquitto ブローカーを新しいサーバーに移動する
現在、本番サーバーを新しいサーバーに移動中です。現在のサーバーにインストールされている Mosquitto Broker を既に使用しているため、ブローカーを新しいサーバーに移動しても、すべてのサブスクリプションは同じままになりますか?
新しいサーバーの IP は、現在のサーバーと同じままになります。
この移行に伴う課題と、MQTT Broker の克服方法について説明します。
価値のある解決策を楽しみにしています。
python - Mosquitto/Paho for Python を使用して 20 を超える MQTT メッセージを受信できない
Mosquitto (現在は Paho) python MQTT クライアントを使用して、HiveMQ ブローカーに接続しています。コードは非常に基本的なもので、こちらのドキュメントから引用されています - https://pypi.python.org/pypi/paho-mqtt
client.subscribe() でわかるように、QoS は 2 です。これは、公式ドキュメントのコードに対する唯一の変更です。
パブリッシング クライアントのコードは次のとおりです。
ここでも、QoS は 2 です。
この QoS の変更により、加入者が受信するメッセージは 20 だけになります。さらに調べてみると、この問題はおそらく が原因であることがわかりましmax_inflight_messages_set()
た。これは、ネットワーク フローの途中で一度に送信できる QoS > 0 のメッセージの最大数を設定するオプション機能です。デフォルトは 20 です。
ただし、他の値に変更しても機能しません。また、クライアントは、これらのメッセージが受信されたときにまだ処理中であると考えるのはなぜですか? 問題を解決するにはどうすればよいですか? これらのメッセージが「処理中」ではなく、配信済みであることをクライアントが確実に理解するにはどうすればよいですか?
raspberry-pi - ブリッジ モードの MQTT Mosquitto が Raspberry と Cloud の間でメッセージを配信できない
2 つの Mqtt Broker (Mosquitto) を接続しようとしています。1 つはクラウド内のサーバーにインストールし、もう 1 つはローカルの Raspberry Pi にインストールしました。Rapeberry Pi Mosquitto は、クラウド インスタンスへの接続を確立する必要があります。これは Raspberry での私の構成です (/etc/mosquitto/conf.d/bridge.conf):
ブローカーに直接接続し、メッセージを送受信できます。また、ログ ファイルで接続が確立されていることもわかりますが、ブローカー間でメッセージが配信されません。
何か案は?
もう 1 つの謎は、Raspberry Pi で mosquitto プロセスを停止した後にのみログ出力を確認できることです。
さらに、Mqtt Lens によって作成されたメッセージ:
c++ - std::string から c-string mosquitto への変換
Mosquitto を使用して、メッセージをサブスクライバーに公開しています。
サブスクライバーの場合、次を使用します。
mosquitto_sub -h ホスト -t "new_topic" -q 0
代わりに、公開のために mosquittopp ラッパーを使用するプログラムを開発しますが、関連はありません。
このメソッドを使用してメッセージを送信します。
s を印刷すると、次のようになります。
そして、私は大丈夫だと思います。
しかし、サブスクライバーは最初の文字のみを受信しているようで、実際には印刷のみです:
何か案は?
アップデート
これは、私が使用したバージョン (1.3.1) のバグで、バージョン 1.3.4 から修正されました。