Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
1. Введение в MQTT
1.1 Введение
MQTT (Message Queuing Telemetry Transport, Message Queuing Telemetry Transport Protocol) — это «облегчённый» протокол связи, основанный на модели публикации/подписки (публикация/подписка). Протокол построен на протоколе TCP/IP и был разработан IBM в 1999 году. .Выпущен в году. Самым большим преимуществом MQTT является то, что он может предоставлять надежные услуги обмена сообщениями в реальном времени для подключения удаленных устройств с очень небольшим количеством кода и ограниченной пропускной способностью. Как недорогой протокол обмена мгновенными сообщениями с низкой пропускной способностью, он имеет широкое применение в Интернете вещей, небольших устройствах, мобильных приложениях и т. д.
MQTT — это транспортный протокол публикации/подписки сообщений на основе клиент-сервера. Протокол MQTT легкий, простой, открытый и простой в реализации. Эти функции делают его применимым для широкого спектра приложений. Во многих случаях, в том числе в ограниченных средах, таких как межмашинная связь (M2M) и Интернет вещей (IoT). Он широко используется в датчиках связи через спутниковые каналы, в медицинском оборудовании для периодических дозвонов, в умных домах и в некоторых миниатюрных устройствах.
2. Технические характеристики конструкции
Поскольку среда Интернета вещей очень специфична, MQTT следует следующим принципам проектирования:
(1) Оптимизирован и не добавляет ненужных функций;
(2) Режим публикации/подписки (Pub/Sub) для облегчения передачи сообщений между датчиками;
(3) Разрешить пользователям динамически создавать темы с нулевыми затратами на эксплуатацию и обслуживание;
(4) Уменьшите объем передачи до минимума, чтобы повысить эффективность передачи;
(5) Примите во внимание такие факторы, как низкая пропускная способность, высокая задержка и нестабильные сети;
(6) Поддержка непрерывного управления сеансом;
(7) Понимать, что вычислительная мощность клиента может быть очень низкой;
(8) Обеспечить управление качеством обслуживания;
(9) Предположим, что данные независимы, не навязывают тип и формат передаваемых данных и сохраняют гибкость.
3. Основные характеристики
Протокол MQTT — это протокол, предназначенный для связи с удаленными датчиками и устройствами управления через ненадежные сети с низкой пропускной способностью. Он имеет следующие основные особенности:
Используйте модель обмена сообщениями «публикация/подписка», чтобы обеспечить публикацию сообщений «один ко многим» и разъединить приложения.
Это очень похоже на XMPP, но информационная избыточность MQTT намного меньше, чем у XMPP, поскольку XMPP использует текст формата XML для передачи данных.
Передача сообщения с замаскированным содержимым полезной нагрузки.
Обеспечьте сетевое подключение с использованием TCP/IP.
Основной MQTT основан на TCP-соединениях для передачи данных, но существует также версия на основе UDP, называемая MQTT-SN. Поскольку эти две версии основаны на разных методах подключения, они, естественно, имеют разные преимущества и недостатки.
Существует три качества публикации сообщений:
(1) «Не более одного раза» публикация сообщений полностью зависит от базовой сети TCP/IP. Возможна потеря или дублирование сообщения. Этот уровень можно использовать в ситуациях, когда для данных датчиков окружающей среды не имеет значения, потеряна ли прочитанная запись, поскольку вскоре будет отправлена вторая. Этот метод в основном использует обычную отправку приложения. Если ваше интеллектуальное устройство не подключено к Интернету во время отправки сообщения, и push-уведомление не было получено в прошлом, оно не будет получено при повторном подключении к сети.
(2) «По крайней мере один раз» гарантирует, что сообщение будет доставлено, но может произойти дублирование сообщения.
(3) «Только один раз» гарантирует, что сообщение придет один раз. Этот уровень может использоваться в некоторых биллинговых системах с более строгими требованиями. В биллинговых системах дублирующиеся или отсутствующие сообщения могут привести к неверным результатам. Эту высококачественную службу публикации сообщений можно также использовать для push-уведомлений в приложениях для обмена мгновенными сообщениями, гарантируя, что пользователи получат их только один раз.
Небольшая передача с небольшими накладными расходами (заголовок фиксированной длины — 2 байта) и переключение протоколов сведены к минимуму для уменьшения сетевого трафика.
Вот почему во введении сказано, что он очень подходит «в области Интернета вещей, связи между датчиками и серверами и сбора информации». Вы должны знать, что вычислительная мощность и пропускная способность встроенных устройств очень велики. относительно слабый, поэтому для передачи сообщений больше подходит именно этот протокол.
4. Принцип протокола MQTT
4.1 Реализация протокола MQTT
Реализация протокола MQTT требует связи между клиентом и сервером. В процессе связи в протоколе MQTT есть три идентификатора: издатель (публикация), агент (брокер) (сервер) и подписчик (подписка). Среди них издатель сообщения и подписчик являются клиентами, агент сообщений — сервером, а издатель сообщения может быть подписчиком одновременно.
Сообщения, передаваемые MQTT, делятся на две части: тему и полезную нагрузку:
Под темой можно понимать тип сообщения. После того, как подписчик подпишется, он или она получит содержимое сообщения (полезную нагрузку) темы;
Полезную нагрузку можно понимать как содержимое сообщения, которое относится к конкретному контенту, который подписчик хочет использовать.
4.2 Передача по сети и сообщения приложений
MQTT построит базовый сетевой транспорт: он установит соединение от клиента к серверу, обеспечивая упорядоченную двунаправленную передачу на основе потока байтов без потерь между ними.
Когда данные приложения передаются по сети MQTT, MQTT связывает соответствующее качество обслуживания (QoS) и имя темы (Topic).
4.3 MQTT-клиент
Приложение или устройство, использующее протокол MQTT, которое всегда устанавливает сетевое соединение с сервером. Клиенты могут:
Публиковать информацию, на которую могут подписаться другие клиенты;
Подписаться на сообщения, опубликованные другими клиентами;
Отписаться или удалить сообщения из приложения;
Отключитесь от сервера.
4.4 MQTT-сервер
Сервер MQTT называется «брокером сообщений» (Broker), который может быть приложением или устройством. Он расположен между издателями сообщений и подписчиками. Он может:
Принимать сетевые подключения от клиентов;
Принимать информацию о заявке, размещенную клиентами;
Обработка запросов на подписку и отписку от клиентов;
Пересылать сообщения приложения подписанным клиентам.
4.5 Подписки, темы и сеансы в протоколе MQTT
Подписка
Подписки включают тематические фильтры и максимальное качество обслуживания (QoS). Подписки связаны с сеансом. Сеанс может содержать несколько подписок. Каждая подписка в каждом сеансе имеет отдельный фильтр тем.
Сессия
После того, как каждый клиент устанавливает соединение с сервером, это сеанс, и между клиентом и сервером происходит взаимодействие с отслеживанием состояния. Сеанс существует между сетью и может охватывать несколько последовательных сетевых подключений между клиентом и сервером.
Название темы
Подключитесь к метке для сообщения приложения, соответствующего подписке сервера. Сервер отправляет сообщение каждому клиенту, подписанному на соответствующий тег.
Тематический фильтр
Подстановочный фильтр для имен тем, используемый в выражениях подписки для обозначения нескольких тем, соответствующих подписке.
Протокол MQTT определяет некоторые методы (также называемые действиями) для представления операций с определенными ресурсами. Этот ресурс может представлять уже существующие данные или динамически генерируемые данные, в зависимости от реализации сервера. Обычно ресурс относится к файлу или выводу на сервере. Основными методами являются:
Соединять. Ожидание установления соединения с сервером.
Отключиться. Подождите, пока клиент MQTT завершит свои действия, и отключите сеанс TCP/IP от сервера.
Подписаться. Дождитесь завершения подписки.
Отписаться. Подождите, пока сервер отменит подписку клиента на одну или несколько тем.
Публиковать. Клиент MQTT отправляет запрос сообщения и возвращается в поток приложения после завершения отправки.
5. Структура пакета данных протокола MQTT.
В протоколе MQTT пакет данных MQTT состоит из трех частей: фиксированного заголовка (Fixed header), переменного заголовка (Variable header) и тела сообщения (полезной нагрузки). Структура пакета данных MQTT следующая:
Исправлен заголовок. Присутствует во всех пакетах данных MQTT и указывает тип пакета данных и идентификатор класса пакета данных.
Переменный заголовок. Существует в некоторых пакетах данных MQTT. Тип пакета данных определяет, существует ли заголовок переменной и его конкретное содержимое.
Тело сообщения (полезная нагрузка). Существует в некоторых пакетах MQTT и представляет собой конкретный контент, полученный клиентом.
5.1 Фиксированный заголовок MQTT
Фиксированные заголовки присутствуют во всех пакетах MQTT и имеют следующую структуру:
5.1.1 Типы пакетов MQTT
Позиция: биты 7–4 в байте 1.
Тип, значение и описание соответствуют 4-битному беззнаковому значению:
5.1.2 Идентификационный бит
Позиция: биты 3–0 в байте 1.
В типах сообщений, которые не используют идентификационные биты, идентификационные биты зарезервированы. Если получен неверный флаг, принимающая сторона ДОЛЖНА закрыть сетевое соединение:
DUP: опубликовать копию сообщения. Он используется для обеспечения надежной передачи сообщений. Если установлено значение 1, MessageId будет добавлен к указанной ниже переменной длине, и потребуется ответ с подтверждением, чтобы гарантировать, что передача сообщения завершена, но его нельзя использовать для обнаружения повторной отправки. сообщений.
QoS: качество обслуживания при публикации сообщений, то есть гарантированное количество раз доставки сообщений.
Ø00:максимум один раз,Прямо сейчас:<=1
Ø01:хотя бы один раз,Прямо сейчас:>=1
Ø10: один раз, то есть: =1
Ø11: Зарезервировано
RETAIN: Флаг хранения публикации, указывающий, что сервер хочет сохранить информацию, отправленную на этот раз. Если появится новый подписчик, сообщение будет отправлено ему. Если оно есть, оно будет отправлено текущему подписчику, а затем выпущено. 5.1.3 Оставшаяся длина
Адрес: Байт 2.
Второй байт фиксированного заголовка используется для сохранения общего размера заголовка переменной длины и тела сообщения, но не сохраняется напрямую. Этот байт можно расширить, и механизм его хранения таков, что первые 7 бит используются для сохранения длины, а последняя часть используется в качестве идентификатора. Когда последний бит равен 1, это означает, что длины недостаточно и для продолжения сохранения необходимо использовать два байта. Например: Рассчитайте следующий размер как 0.
5.2 Заголовок переменной MQTT
Пакеты MQTT содержат переменный заголовок, который находится между фиксированным заголовком и полезной нагрузкой. Содержимое заголовка переменной варьируется в зависимости от типа пакета данных. Наиболее распространенное применение — идентификатор пакета:
Многие типы пакетов включают 2-байтовое поле идентификации пакета. К этим типам пакетов относятся:
PUBLISH (QoS > 0)
PUBACK
PUBREC
PUBREL
PUBCOMP
SUBSCRIBE
SUBACK
UNSUBSCRIBE
UNSUBACK
5.3 Тело сообщения полезной нагрузки
Третья часть пакета данных MQTT тела сообщения полезной нагрузки содержит сообщения четырех типов: CONNECT, SUBSCRIBE, SUBACK и UNSUBSCRIBE:
CONNECT, содержимое тела сообщения в основном включает в себя: ClientID клиента, подписанную тему, сообщение, имя пользователя и пароль.
ПОДПИСАТЬСЯ, содержимое тела сообщения представляет собой серию тем, на которые необходимо подписаться, и QoS.
SUBACK, содержимое тела сообщения представляет собой подтверждение и ответ сервера на тему и качество обслуживания, требуемое SUBSCRIBE.
ОТМЕНИТЬ ПОДПИСКУ, содержимое тела сообщения — это тема, на которую нужно подписаться.
Загрузить установочный пакет можно двумя способами:
(1) Вы можете загрузить его в Windows и перетащить в Ubuntu.
(2) Загрузите прямо в терминале Ubuntu, введите следующие инструкции для загрузки.
wget https://www.emqx.io/cn/downloads/broker/v4.2.5/emqx-ubuntu16.04-4.2.5-x86_64.deb
6.2 Установка сервера
После того, как установочный пакет скачается, установите его в Ubuntu:
sudo dpkg -i emqx-ubuntu16.04-4.2.5-x86_64.deb
После завершения установки запустите сервер
sudo emqx start
Фактически, emqx был запущен в фоновом режиме. После успешной установки он автоматически запустится послезавтра, а также автоматически запустится после загрузки.
EMQ X предоставляет инструмент командной строки emqx, который позволяет пользователям запускать, завершать работу, входить в консоль и выполнять другие операции в EMQ X.
Язык кода:javascript
копировать
emqx start
Начать в фоновом режиме EMQ X Broker;
emqx stop
закрытие EMQ X Broker;
emqx restart
Перезапуск EMQ X Broker;
emqx console
Начать использовать консоль EMQ X Broker;
emqx foreground
Начать использовать консоль EMQ X Брокер, с. emqx console Разное, emqx foreground Ввод не поддерживается Erlang Заказ;
emqx ping
Ping EMQ X Broker。
Войдите на страницу управления сервером через браузер
Откройте браузер и введите локальный URL-адрес обратной связи http://127.0.0.1:18083 в поле ввода URL-адреса.
Введите URL-адрес, чтобы увидеть страницу входа на сервер.
Первоначальное имя пользователя для входа — admin, а пароль — общедоступный. Нажмите, чтобы войти в систему управления серверной частью.
Вы можете протестировать функции сервера с помощью программного обеспечения модема связи.
Найдите знакомые всем окна и откройте программное обеспечение режима связи, чтобы начать тестирование. Перед этим нам также нужно проверить IP-адрес сервера Ubuntu, открыть терминал и ввести команду ifconfig.
Если вы знаете IP-адрес, вы можете получить к нему доступ через клиент режима связи.
mqtt-клиент
Откройте два окна клиента
Введите IP-адрес сервера 192.168.78.130, полученный в ifconfig, и укажите номер порта 1883 по умолчанию. Нажмите, чтобы включить.
Тема подписки клиента1 заполняет тему публикации клиента2, а тема подписки клиента2 заполняет тему публикации клиента1. Щелкните, чтобы подписаться на тему.
клиент1 передает привет xxx2, клиент2 может его получить.
Связь между клиентами реализована через прокси локального mqtt-сервера.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/134490.html Исходная ссылка: https://javaforall.cn