0

私の目的は、MQTT デバイス間のメッセージ レイテンシ (スループットではない) を測定することであり、コード ハックに関するフィードバックを探しています。セットアップは簡単です。2 つのエンドポイントとして機能する 1 つのデバイス (2 つのターミナル セッションを備えた古い Linux PC。1 つはサブスクライバーを実行し、もう 1 つはパブリッシャー サンプル アプリを実行) と のデフォルト ブローカーtcp://m2m.eclipse.org:1883)。src/samplesフォルダの C 言語パブリッシュ/サブスクライブ サンプル アプリに、タイム キャプチャ コード フラグメントを挿入しました。

以下、変更点です。フィードバックをお寄せください。

サブスクライブ サンプル アプリの変更点MQTTAsync_subscribe.c( )

msgarrvd(メッセージが到着しました) 関数の先頭に以下の行を挿入しました

//print arrival time
struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message arrived: %ld.%06ld\n", tv.tv_sec, tv.tv_usec);

パブリッシュ サンプル アプリへの変更MQTTAsync_publish.c( )

onSend(callback) 関数の先頭に以下の行を挿入しました

struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message with token value %d delivery confirmed at %ld.%06ld\n",
               response->token, tv.tv_sec, tv.tv_usec);

これらの変更により (パブリッシャーで配信が確認された時刻からメッセージがサブスクライバーに到着した時刻を差し引いた後)、1 ミリ秒から 0.5 ミリ秒の間の時間が得られます。

質問

これはレイテンシーの大まかなベンチマークとして意味がありますか?

これは往復時間ですか?

往復時間は適切な球場でしょうか? 少ないほうがいい?もっと?

一方通行の時間ですか?

別の方法でレイテンシ ベンチマークを設計する必要がありますか? 大まかな測定が必要です(XMPPと比較しています)。

デフォルトの QoS 値 (1) を使用しています。変更する必要がありますか?

パブリッシャーが接続 (および切断) するのに一定の時間がかかります。これらを追加する必要がありますか?

4

1 に答える 1

0

200msのレイテンシーは高い!ここにコードをアップロードしてもらえますか?

これはレイテンシーの大まかなベンチマークとして意味がありますか?

――そうですね。しかし、より良いアプローチは、サブスクライブされたメッセージで自動化された時刻減算を行い、両方を NTP に同期させることです。

これは往復時間ですか?一方通行の時間ですか?

-- メッセージが公開されました - パブリッシャーの ACK を受信し、同じメッセージがサブスクライブしたクライアントに転送されました。

往復時間は適切な球場でしょうか? 少ないほうがいい?もっと?

――少なくていいですね。

別の方法でレイテンシ ベンチマークを設計する必要がありますか? 大まかな測定が必要です(XMPPと比較しています)。

デフォルトの QoS 値 (1) を使用しています。変更する必要がありますか?

-- QoS 0 で試す (ファイア アンド フォーゲット)

パブリッシャーが接続 (および切断) するのに一定の時間がかかります。これらを追加する必要がありますか?

- はい。追加する必要がありますが、この時間は非常に短いはずです。

于 2014-12-14T23:19:58.713 に答える