2017-08-19 5 views
0

私は現在MQTTブローカーとしてEMQを使用しています。私はできるだけ早く最新の「オンライン」または単にクライアントの接続状態を取得する必要があります。現在、バックエンドに$ SYSトピックをサブスクライブする単一のクライアントを実行させ、クライアントの接続と切断のイベントをメッセージとして公開します。クライアントが接続されると、接続されたメッセージは$ SYS /.../ connectedにパブリッシュされます。接続が切断されると、切断されたメッセージが$ SYS /.../ disconnectedに発行されます。MQTTブローカーがクライアントの接続状態をチェックする時間を短縮する方法

このアプローチの問題点は、切断されたメッセージは、クライアントが正常に切断されたときにただちに公開されることです。クライアントが意図的に接続を閉じるときも同様です。しかし、切断が到達不能なネットワークまたは電源切断によるものである場合、メッセージは3分以上経過すると公開されます。

私はLWT(Last Will Testament)アプローチを使ってみましたが、結果は上記と似ています。だから私は、切断が意図せずに起きた場合、クライアントはブローカにブローカとの接続を切断すると伝えるチャンスがないと思います。したがって、ブローカーがクライアントが実際に切断されていることに気づくことは間違いありません。

私の質問は、どうすればその時間を短縮できますか?私はかつて、「キープアライブ」なことがこの問題と関係していると考えています。しかし、数回の経験の後では、そうではありません。

答えて

1

キープアライブを使用すると、

重要なビットは、ブローカーは、通常、約1.5倍だけで生きている時間を維持し、生きている価値がない維持した後、切断されたクライアントを考慮することを覚えておくことです欲しいものです。キープアライブ値を十分に小さく設定すると、クライアントがオフラインになった後にかなり早く通知されるはずですが、クライアントがキープアライブ以上のメッセージレートを持つトピックを公開/購読していない場合、ネットワークトラフィックが増加します間隔。 MQTTの仕様でキープアライブの

完全な詳細はhere

+0

を見つけることができるキープアライブマイ60年代でした。 3分後にメッセージが来るのは、ブローカーが断線に気付くのにかかる時間は、生き続ける価値の約1.5倍であると言われています。私はわずか2人のクライアントでこれをローカルでテストしていました。 –

+0

どのようにクライアントを切断していますか?それはEMQの人工物かもしれないが、それはモスキートで期待どおりに動作します – hardillb

+0

私はWi-Fiをオフにしました。約3分間待ってから、切断メッセージが発行されました。 –

関連する問題