Я использую библиотеку mosquitto для интеграции протокола MQTT в мои проекты C ++ (Visual Studio 13).
Мой опыт работы с библиотекой заключается в том, что во многих случаях предпочтительным является асинхронный режим. Это означает, что я использую mosquitto_connect_async
для инициализации соединения, а также mosquitto_loop_start
а также mosquitto_loop_stop
для общего начала и окончания цикла комаров.
Эта настройка дает мне преимущество в том, что все ресурсоемкие операции выполняются в отдельных потоках, в то время как основной поток не блокируется из-за выполнения этих операций (например, получение сообщений, вызовы обратного вызова и т. Д.).
При отладке приложения можно подтвердить асинхронный режим при установке точки останова в функции обратного вызова, которая передается mosquitto_message_callback_set
, Эта функция вызывается внутри потока выполнения mosquitto, а НЕ в основном потоке, всякий раз, когда новое сообщение принимается через MQTT. Стек вызовов также подтверждает это в моем сценарии.
Мой вопрос сейчас, что происходит в случае публикации сообщения брокеру MQTT? Я настроил свою систему так же, как в случае получения. Все функции от комаров запускаются в асинхронном режиме. Но что именно происходит, когда сейчас звонит mosquitto_publish
? Вызывается ли эта функция в текущем потоке выполнения или содержимое сообщения пересылается асинхронным потокам москитов, которые затем, в свою очередь, отправляют сообщение посреднику?
Насколько я вижу, документация от комаров не дает статистического ответа для этого варианта использования. Обширный Google также не дал ответа на мой вопрос.
Я ценю некоторую помощь.
Заранее спасибо!
Задача ещё не решена.
Других решений пока нет …