Неблокирующая библиотека MQTT

Существуют ли какие-либо библиотеки MQTT, которые не блокируются при подключении?

В настоящее время я использую PubSubClient, и часть подключения содержит этот код: https://github.com/knolleary/pubsubclient/blob/master/src/PubSubClient.cpp

        while (!_client->available()) {
            unsigned long t = millis();
            if (t-lastInActivity >= ((int32_t) MQTT_SOCKET_TIMEOUT*1000UL)) {
                _state = MQTT_CONNECTION_TIMEOUT;
                _client->stop();
                return false;
            }
        }

Я бы хотел, чтобы мой основной цикл продолжался или вызывался обратный вызов, пока установлено соединение MQTT, а не ждать целую вечность, если сервер MQTT недоступен.

Обновление:

Я написал модификацию, чтобы использовать функцию обратного вызова, и вызвал ее в предложении else, добавленном к этому оператору if, и обнаружил, что задержка блокировки не является этим циклом while. Я думаю, что это находится в _client->connect в начале метода.

, 👍5


1 ответ


4

У меня был тот же вопрос, и я нашел библиотеку mqtt, которая полностью неблокирующая.

  • https://github.com/marvinroger/async-mqtt-client

Вам нужно установить его вручную, и в документах даны инструкции:

  • https://github.com/marvinroger/async-mqtt-client/blob/develop/docs/1.-Getting-started.md

Для этого требуется одна дополнительная библиотека:

  • для esp8266: https://github.com/me-no-dev/ESPAsyncTCP
  • для esp32: https://github.com/me-no-dev/AsyncTCP

Мне также понравилось использование библиотеки Ticker в качестве общего инструмента для неблокирующего кода.

,