昨日の、通信が途絶えている時にブローカがためておいてくれる件、mosquitto.conf
にはこんなオプションがありました。
- max_queued_messages
|
|
データ送信のキューに長さの最大を指定します。これ以上になったらどうなるのかなあ?古いやつから捨てられるのかしら?
さらに max_inflight_messagesというのもあって、こちらは通信中(?)の最大メッセージ数を規定します。
client IDの件に関連するオプションでこんなものもありました。
- allow_zero_length_clientid
|
|
client IDなしで接続できるかどうか、を設定するオプションかと思われます。ここに書いてあるようにIDを設定してしまうと、サブスクライブ接続を切った時に、それがテンポラリーなのかパーマネントなのかブローカは知る由がありません。そのため、同じIDで再接続されると切断されていた期間のデータが送られてきます。それは不要、という時もありますよね。。。。
今のところの対処は、一度 QoS0で再接続してから切る、というのをやっています。こうすると次に接続した時は接続後の情報から入手できます。ほんとはもっといい手があるのかとも思いますが。
ココらへんは、データアクイジションの側であれば、あとから不要な部分を切り取るとか、いかようにでも処理できるかと思います。コマンド系の接続では重要なポイントになりそうなので、考慮の必要がありそうですね。タイムスタンプを確認するとか。
などと話していたら、こんなオプションがありました。
- persistent_client_expiration
|
|
persistentは「しつこい」という意味らしいですが、長い接続は強制的に解除するということのようです。
「ランダムのidを使っていながらclean session(切断時の送信データを破棄してもらうモード)をfalseで接続してくるたちの悪いクライアント」とありますね。そういう接続はしないように設計します。はい。