Начало работы с MQTT

Интернет вещей

Теперь давайте быстро попробуем использовать MQTT для публикации и подписки на данные.

Учитывая, что Mosquitto больше подходит для новичков, я выбрал его для экспериментов. Экспериментальная среда — 64-разрядная версия Windows 10, а версия Mosquitto — 1.5.8.

Москитная установка

  • ВходитьMosquittoНа странице загрузки выберите соответствующую операционную систему для загрузки и установки. Пользователи Windows загружают установочный пакет и нажимают «Далее», пока установка не завершится. По умолчанию система будет установлена ​​в «C:\Program Files\mosquitto». Для удобства добавьте этот путь в переменную среды Path. После успешной установки будет добавлена ​​системная служба под названием Mosquitto Broker, которая запустится автоматически.
  • Кстати, если вы являетесь пользователем CentOS, вы можете установить его напрямую с помощью команды yum install mosquitto. Подробные инструкции по установке на другие платформы см. на странице загрузки.
  • Используйте windows + r, выполните команду services.msc, откройте службу Windows, найдите службу Mosquitto Broker, проверьте состояние службы и запустите службу, если служба не запущена. Теперь вы готовы подключиться к Брокеру.

Подписывайтесь на темы

Откройте терминал командной строки и введите следующую команду, чтобы подписаться на тему Topic1.

$ mosquitto_sub -d -t topic1 
Client mosqsub|3508-SCNWCL0121 sending CONNECT
Client mosqsub|3508-SCNWCL0121 received CONNACK (0)
Client mosqsub|3508-SCNWCL0121 sending SUBSCRIBE (Mid: 1, Topic: topic1, QoS: 0)
Client mosqsub|3508-SCNWCL0121 received SUBACK
Subscribed (mid: 1): 0

Первая строка выше — это команда, используйте команду mosquitto_sub, чтобы подписаться на тему.

Параметр -d указывает, что режим отладки включен, так что mosquitto_sub будет отображать подробное подключение и процесс отправки и получения данных.

-t тема1 указывает, что тема тема1 должна быть подписана.

Некоторые параметры здесь не прописаны, а используются значения по умолчанию, например, хост использует localhost, порт использует 1883, а в качестве Client ID используется "mosqsub|3508-SCNWCL0121", где 3508 - это ID процесса , а SCNWCL0121 — это имя моей машины.

Если вы хотите указать хост, порт и идентификатор клиента, вы можете использовать его следующим образом.

$ mosquitto_sub -d -h localhost -p 1883 -i subscriber-test -t topic1
Client subscriber-test sending CONNECT
Client subscriber-test received CONNACK (0)
Client subscriber-test sending SUBSCRIBE (Mid: 1, Topic: topic1, QoS: 0)
Client subscriber-test received SUBACK
Subscribed (mid: 1): 0

-h означает хост

-p означает порт

-i представляет идентификатор клиента.

Фактически, все использование командной строки можно просмотреть с помощью --help, введите

$ mosquitto_sub --help

Вы увидите его подробное использование, все параметры отображаются, очень подробно.

Вторая и третья строки — это процесс установления соединения.

Client mosqsub|3508-SCNWCL0121 sending CONNECT
Client mosqsub|3508-SCNWCL0121 received CONNACK (0)

Указывает, что клиент «mosqsub|3508-SCNWCL0121» отправляет CONNECT, а брокер отвечает CONNACK (0). Где 0 — код состояния, указывающий на успешное подключение. Если это любой другой номер, это означает, что соединение не удалось. Существует множество причин сбоя, например, текущий протокол не поддерживается, сервер недоступен и т. д. Для получения дополнительной информации см.Connect Return Code.

Строки с четвертой по шестую - это процесс подписки на тему,

Client mosqsub|3508-SCNWCL0121 sending SUBSCRIBE (Mid: 1, Topic: topic1, QoS: 0)
Client mosqsub|3508-SCNWCL0121 received SUBACK
Subscribed (mid: 1): 0

отправка SUBSCRIBE (Mid: 1, Topic: тема1, QoS: 0) означает отправку запроса на подписку,

Mid — это идентификатор сообщения, который отсчитывается от 1. Когда соединение отправляет несколько сообщений, значение Mid увеличивается.

Тема:тема1 указывает тему, на которую следует подписаться, когда тема1.

QoS: 0 определяет уровень QoS, по умолчанию 0.

сделать объявление

Откройте новый терминал командной строки и введите следующую команду

$ mosquitto_pub -d -t topic1 -m "Hello MQTT"
Client mosqpub|12796-SCNWCL012 sending CONNECT
Client mosqpub|12796-SCNWCL012 received CONNACK (0)
Client mosqpub|12796-SCNWCL012 sending PUBLISH (d0, q0, r0, m1, 'topic1', ... (10 bytes))
Client mosqpub|12796-SCNWCL012 sending DISCONNECT

Первая строка — это команда публикации сообщения, которая публикует сообщение в теме топика1, -m указывает, что содержимое отправленного сообщения — «Hello MQTT». У нас также включен режим отладки.

Вторая и третья строки — это процесс подключения

Четвертая строка — информация об опубликованном сообщении.

Client mosqpub|12796-SCNWCL012 sending PUBLISH (d0, q0, r0, m1, 'topic1', ... (10 bytes))

Среди них d0, q0, r0 и m1 — это параметры, указанные для публикации сообщения, и здесь используются параметры по умолчанию.

d0 указывает, что DUP равен 0, DUP означает, следует ли повторять метку, если это первая отправка сообщения, она устанавливается на 0. Например, если это повторная доставка, QoS устанавливается равным 1, и сервер не отвечает после того, как клиент отправляет сообщение по тайм-ауту.Чтобы убедиться, что сообщение может быть отправлено, клиент отправляет его снова.Если это DUP устанавливается в 1, что указывает на повторную отправку сообщения.

q0 означает, что QoS равно 0.

r0 означает, что RETAIN равно 0. RETAIN означает, следует ли просить брокера сохранить это сообщение для меня, если установлено значение 1, сервер сохранит текущее сообщение. В следующий раз, когда новый клиент подключается и подписывается на тему1, сервер автоматически отправляет это зарезервированное сообщение клиенту.

m1 указывает порядковый номер сообщения, который по умолчанию начинается с 1.

Тема 1 размещена в этой теме.

... (10 байт) Содержание сообщения не отображается, но длина сообщения составляет 10 байт.

Последняя строка отключена.

Client mosqpub|12796-SCNWCL012 sending DISCONNECT

получить сообщение

После публикации сообщения вернитесь к ранее подписанному терминалу, и полученное сообщение будет отображено.

Client mosqsub|11104-SCNWCL012 received PUBLISH (d0, q0, r0, m0, 'topic1', ... (10 bytes))
topic1 Hello MQTT

Первая строка показывает полученный пакет PUBLISH, а вторая строка печатает полученные данные.

Суммировать

Mosquitto — это простая в использовании реализация MQTT, включающая сервер и клиент. В этом эксперименте мы фактически выполнили две команды.

$ mosquitto_sub -d -t topic1 
$ mosquitto_pub -d -t topic1 -m "Hello MQTT"

Представляет темы подписки и публикации сообщений соответственно. Когда другой клиент успешно отправит сообщение, подписчик получит сообщение и распечатает его.

В приведенных выше командах параметр -d очень полезен и является для нас мощным инструментом для изучения протокола MQTT Вот пример.

QoS — это гарантия качества обслуживания.При публикации сообщения, когда QoS установлено на 0, брокер не будет отвечать после того, как клиент отправит сообщение.

Если для QoS установлено значение 1, после того, как клиент отправит сообщение, он будет ждать, пока брокер подтвердит его.Если он не может дождаться PUBACK, он отправит его повторно через определенный период времени. Это гарантирует, что брокер может получить сообщение. Давайте сравним.

$ mosquitto_pub -d -t topic1 -m "Hello MQTT"
Client mosqpub|6188-SCNWCL0121 sending CONNECT
Client mosqpub|6188-SCNWCL0121 received CONNACK (0)
Client mosqpub|6188-SCNWCL0121 sending PUBLISH (d0, q0, r0, m1, 'topic1', ... (10 bytes))
Client mosqpub|6188-SCNWCL0121 sending DISCONNECT
$ mosquitto_pub -d -q 1 -t topic1 -m "Hello MQTT"
Client mosqpub|14788-SCNWCL012 sending CONNECT
Client mosqpub|14788-SCNWCL012 received CONNACK (0)
Client mosqpub|14788-SCNWCL012 sending PUBLISH (d0, q1, r0, m1, 'topic1', ... (10 bytes))
Client mosqpub|14788-SCNWCL012 received PUBACK (Mid: 1)
Client mosqpub|14788-SCNWCL012 sending DISCONNECT

Когда мы отправляем сообщение, если мы добавим параметр -q 1, это означает, что QoS установлен в 1. Пакет будет иметь еще один ответ.

Client mosqpub|14788-SCNWCL012 received PUBACK (Mid: 1)

Механизм реализации QoS более сложен, и я напишу о нем статью позже.MQTT QoS, Если вы заинтересованы, вы можете нажать на ссылку, чтобы сначала посмотреть.


Все статьи вGithubСинхронизируйтесь, вы также можете посетить мойличный блогНажмите, чтобы просмотреть