私は現在MQTTブローカーとしてEMQを使用しています。私はできるだけ早く最新の「オンライン」または単にクライアントの接続状態を取得する必要があります。現在、バックエンドに$ SYSトピックをサブスクライブする単一のクライアントを実行させ、クライアントの接続と切断のイベントをメッセージとして公開します。クライアントが接続されると、接続されたメッセージは$ SYS /.../ connectedにパブリッシュされます。接続が切断されると、切断されたメッセージが$ SYS /.../ disconnectedに発行されます。MQTTブローカーがクライアントの接続状態をチェックする時間を短縮する方法
このアプローチの問題点は、切断されたメッセージは、クライアントが正常に切断されたときにただちに公開されることです。クライアントが意図的に接続を閉じるときも同様です。しかし、切断が到達不能なネットワークまたは電源切断によるものである場合、メッセージは3分以上経過すると公開されます。
私はLWT(Last Will Testament)アプローチを使ってみましたが、結果は上記と似ています。だから私は、切断が意図せずに起きた場合、クライアントはブローカにブローカとの接続を切断すると伝えるチャンスがないと思います。したがって、ブローカーがクライアントが実際に切断されていることに気づくことは間違いありません。
私の質問は、どうすればその時間を短縮できますか?私はかつて、「キープアライブ」なことがこの問題と関係していると考えています。しかし、数回の経験の後では、そうではありません。
を見つけることができるキープアライブマイ60年代でした。 3分後にメッセージが来るのは、ブローカーが断線に気付くのにかかる時間は、生き続ける価値の約1.5倍であると言われています。私はわずか2人のクライアントでこれをローカルでテストしていました。 –
どのようにクライアントを切断していますか?それはEMQの人工物かもしれないが、それはモスキートで期待どおりに動作します – hardillb
私はWi-Fiをオフにしました。約3分間待ってから、切断メッセージが発行されました。 –