У меня есть приложение, которое использует mqtt для связи между модулями и мобильным терминалом.
В некоторых ситуациях, когда сообщения не поступают, узел выполняет самотестирование MQTT (отправка сообщения самому себе), а при сбое самотестирования пытается повторно подключиться к брокеру (mqtt не всегда приходит в автономном режиме). И тогда могут возникнуть две проблемы:
Если я выполняю mqtt.client: close (), чтобы убедиться, что клиент закрыт (чтобы избежать второй проблемы), а клиент уже закрыт, узел сбрасывается.
Если я выполняю mqtt.client: connect () и клиент все еще подключен, возникает исключение и рестет.
есть ли способ узнать, подключен ли клиент mqtt или нет?
Спасибо за ваш комментарий. Я собираюсь описать, что я делаю, чтобы увидеть, можете ли вы мне помочь:
У меня две независимые системы: хозяин и раб. Мастер публикует тестовое сообщение каждые 10 минут. Если нет ответа от раба. он публикует тестовое сообщение для себя. Если самопроверка не наступает, предполагается отключение от брокера и инициируется повторное соединение.
И здесь возникает проблема: иногда клиент отключается, и все идет хорошо, но иногда он все еще подключен, но не отвечает, и узел перезагружается с исключением «уже подключено».
Выполнение mqtt: close () перед повторным подключением должно быть безопасным, но если я отправлю его, и клиент действительно отключится, узел будет перезагружен без какой-либо причины (известной мне).
Все это происходит без получения сообщений в автономном режиме.