Базовая схема понимания MQTT:


Основная технологическая схема:


MQTT - это протокол связи, который определяет, как организовать байты данных и передать их по сети TCP/IP. Но в действительности разработчикам не нужно вникать в конкретные детали этого протокола связи. Все, что нам нужно знать, это то, что каждое сообщение имеет команду и полезную нагрузку в виде данных. Команда определяет тип сообщения (например, сообщение CONNECT или сообщение SUB SCRIBE). Все библиотеки и инструменты MQTT предоставляют базовые методы для прямой обработки этих сообщений и автоматического заполнения некоторых необходимых полей (в соответствующих байтах пакета), таких как сообщение и идентификатор клиента.
Сначала клиент отправляет сообщение CONNECT для подключения к прокси-серверу. Сообщение CONNECT требует установления соединения между клиентом и прокси-сервером.
Основные параметры команды CONNECT
- cleanSession: Этот флаг определяет, является ли соединение постоянным. Постоянная сессия сохраняет все подписки и потенциально потерянные сообщения (в зависимости от QoS) в брокере (сервере).
- username: Имя пользователя для подключения к прокси-серверу. (Да, прокси-сервер не предназначен для подключения кого-либо, вы можете подключиться к нему, если хотите)
- password: Пароль для подключения к прокси-серверу. (Да, прокси-сервер не предназначен для подключения кого-либо, вы можете подключиться к нему, если хотите)
- lasWillTopic: Связь неожиданно прерывается, и прокси-сервер отправляет сообщение с последней волей в определенную тему.
- lastWillQos: QoS последнего сообщения.
- lastWillMessage: само последнее сообщение о завещании.
- KeepAlive: Это интервал времени, необходимый клиенту для поддержания соединения путем пингования сервера.
Когда клиент отправляет команду CONNECT на прокси-сервер, сервер вызывает команду CONNACK, чтобы сообщить о состоянии канала обслуживания.
Основные параметры команды CONNACK
- sessionPresent: Этот параметр указывает, есть ли у ссылки постоянная сессия. То есть тема-подписчик подключена и пропущенные сообщения будут приняты.
- returnCode: 0 означает успех. в противном случае - неудачу.
После того как клиент и сервер установят соединение, клиент может подписаться на определенные темы с сервера. (Отправьте одно или несколько сообщений SUBSCRIBE).
Указывает, что когда сервер получает данные этой темы, переданные другими терминалами, он будет отправлять их им по умолчанию.
Список параметров SUBSCRIBE
- QoS: качество услуг. Как правило, существует 3 значения перечисления.
- 0: Указывает на ненадежный сервис. Сообщение передается только один раз. Если текущий клиент находится в сети или не получил сообщение по сетевым причинам, оно не будет получено.
- 1: Сообщение передано хотя бы один раз. Если оно не прошло один раз, передайте его во второй раз, в N-й раз. Возможно дублирование данных.
- 2: Сообщение передается ровно один раз. Две стороны используют 4-стороннее рукопожатие, чтобы гарантировать, что сообщение может быть точно передано от сервера к клиенту, и только один раз.
Хотя параметры QoS задаются на клиенте, они определяют режим, в котором сервер доставляет данные. Таким образом, QOS используется для ограничения работы сервера, а не самого клиента.
- тема: Тема, на которую клиент хочет подписаться.
Тема может иметь несколько уровней, разделенных символами слеша. Например, "dw/demo" и "/ibm/bluemix/qmqt" являются допустимыми темами.
Когда клиент успешно подписывается на тему с сервера, сервер возвращает сообщение SUBACK, содержащее один или несколько параметров returnCode.
Параметры сообщения SUBACK
- returnCode: Значение 0-2, указывающее на успешную подписку и возвращающее QOS этого сообщения о подписке. Значение 128: Подписка не удалась.
Поскольку клиент может подписаться на тему от сервера, он также может отписаться от нее.
Командой, противоположной команде подписки SUBSCRIBE, является команда отмены подписки UNSUBSCRIBE.
Эта команда очень проста. В ней есть только один параметр "Тема".
- тема: Этот параметр - тема, от которой отписывается клиент.
Выше речь идет о подписке. Подписка требует отправки сообщений с сервера. Но сам сервер, по сути, не генерирует данные, так откуда же они берутся?
Выполните команду PUBLISH через другого клиента, чтобы отправить данные на прокси-сервер. И, наконец, передайте данные через прокси-сервер клиентам, подписанным на эту службу.
Параметры сообщения PUBLISH
- topicName: Связанные темы для публикации сообщений.
- qos: Уровень качества доставки сообщений. (сервер ограничений)
- retainFlag: Этот флаг указывает, сохраняет ли сервер это сообщение как последнее известное сообщение для данной темы.
- Полезная нагрузка: фактические данные в сообщении. Это может быть текстовая строка или двоичные данные большого объекта (изображение).
Подведите итоги
- MQTT - это облегченный протокол, используемый для передачи данных между терминальными устройствами со слабой вычислительной мощностью и плохим сетевым окружением.
- MQQ основан на базовой модели публикации/подписки.
- Каждый терминал может подписываться на определенные темы с сервера и публиковать определенные темы на прокси-сервере.
- Когда сервер получает данные, отправленные с определенных терминалов, он передает их терминалам, подписавшимся на эту услугу.