Для чего нужен параметр Keep Alive MQTT?
Поддерживать активность в протоколе MQTT
Зачем нам нужен Keep Alive
Протокол MQTT размещен поверх протокола TCP, который ориентирован на соединение и обеспечивает стабильный и упорядоченный поток байтов между двумя подключенными сторонами. Однако в некоторых случаях TCP может иметь проблемы с половинным соединением. Полусоединение — это соединение, которое было разорвано или не установлено на одной стороне, в то время как соединение на другой стороне все еще сохраняется. В этом случае полуподключенная сторона может непрерывно передавать данные, которые, очевидно, никогда не доходят до другой стороны. Чтобы избежать черных дыр в связи, вызванных половинными соединениями, протокол MQTT предоставляет механизм Keep Alive, который позволяет клиенту и серверу MQTT определить, есть ли проблема с половинным соединением, и закрыть соответствующее соединение.
Механизм и использование Keep Alive
При подключении
Когда MQTT-клиент создает соединение с MQTT-брокер, механизм Keep Alive может быть включен между взаимодействующими сторонами, установив в поле заголовка переменной Keep Alive в пакете протокола запроса на соединение ненулевое значение. Keep Alive — это целое число от 0 до 65535, представляющее максимальное время в секундах, которое может пройти между пакетами протокола MQTT, отправленными клиентом.
Когда брокер получает запрос на подключение от клиента, он проверяет значение поля Keep Alive в заголовке переменной. При наличии значения брокер включит механизм Keep Alive.
в MQTT 5.0 В стандарте также была введена концепция Server Keep Alive, позволяющая брокеру принимать значение Keep Alive, переданное в клиентском запросе, или переопределять его, в зависимости от его реализации и других факторов. Если брокер решит переопределить это значение, ему необходимо установить новое значение в поле Подтверждение активности сервера пакета подтверждения подключения (CONNACK), и клиент должен использовать это значение, чтобы переопределить свое собственное предыдущее значение Подтверждение активности при чтении. это в КОННАК.
Процесс поддержания жизни
Клиентский процесс
После того, как соединение установлено, клиент должен убедиться, что интервал между любыми двумя отправляемыми им пакетами протокола MQTT не превышает значения Keep Alive. Если клиент бездействует и у него нет пакетов для отправки, вместо этого он может отправлять пакеты протокола PINGREQ.
Когда клиент отправляет пакет PINGREQ, брокер должен вернуть пакет PINGRESP. Если клиент не получает пакет PINGRESP от сервера в течение надежного времени, это означает, что существует половинное соединение, брокер находится в автономном режиме или произошел сбой в сети, и клиент должен закрыть соединение.
Брокерский процесс
Если после установления соединения брокер не получает никаких пакетов от клиента в течение 1,5-кратного времени поддержания активности, он будет считать, что возникла проблема с подключением к клиенту, и брокер отключится от клиента.
Если брокер получает пакет протокола PINGREQ от клиента, он должен ответить пакетом протокола PINGRESP для подтверждения.
Механизм захвата клиентов
При наличии полусоединения внутри брокера и когда соответствующий клиент инициирует переподключение или новое соединение, брокер запускает механизм захвата клиента: он закрывает старое полусоединение и устанавливает новое соединение с клиентом.
Этот механизм гарантирует, что клиенту не будет препятствовать повторное подключение из-за проблемы с половинным подключением.
Как использовать Keep Alive в EMQX
В EMQX, вы можете настроить поведение механизма проверки активности сервера через файл конфигурации. Соответствующее поле выглядит следующим образом:
zone.external.server_keepalive
Если это значение не установлено, время поддержания активности будет определяться клиентом во время создания соединения.
Если установлено это значение, посредник принудительно включает механизм проверки активности сервера для всех подключений в этой зоне и будет использовать это значение для переопределения значения в клиентском запросе на подключение.
zone.external.keepalive_backoff
Тип | Дополнительное значение | По умолчанию |
---|---|---|
плавать | > 0,5 | 0,75 |
Протокол MQTT требует, чтобы брокер предполагал, что клиент отключен, если он не получает никаких протокольных пакетов от клиента в течение 1,5-кратного времени поддержания активности.
В EMQX мы ввели коэффициент отсрочки проверки активности и выставили этот фактор через файл конфигурации, чтобы пользователи могли более гибко контролировать поведение Keep Alive на стороне брокера.
После введения коэффициента отсрочки EMQX рассчитывает максимальное время ожидания по следующей формуле:
Keepalive * backoff * 2
Значение отсрочки по умолчанию равно 0,75. Поэтому поведение EMQX будет полностью соответствовать стандарту MQTT, если пользователь не изменит эту конфигурацию.
Обратитесь к Документация по конфигурации EMQX Чтобы получить больше информации.
Примечание. Настройка Keep Alive для соединений WebSocket
EMQX поддерживает клиентский доступ через WebSockets. Когда клиент инициирует соединение с помощью WebSockets, ему нужно только установить значение Keep Alive в параметрах клиентского соединения. Ссылаться на Подключение к серверу MQTT с помощью WebSocket.
Резюме
В этой статье рассказывается о механизме Keep Alive в протоколе MQTT и о том, как его использовать в EMQX. Разработчики могут использовать эту функцию для обеспечения стабильности MQTT-соединения и создавайте более надежные приложения IoT.
Первоначально опубликовано на