Добро пожаловать в четвертую статью серии сообщений MQTT 5.0. В предыдущей статье мы представили сообщения SUBSCRIBE и UNSUBSCRIBE в MQTT 5.0. Теперь мы представим управляющие сообщения, используемые для поддержания соединения: PINGREQ и PINGRESP.
В дополнение к управляющим сообщениям, используемым для подключения, публикации и подписки, MQTT также имеет тип сообщений, используемый для имитации периодических импульсов между клиентом и сервером для поддержания соединения. Это сообщения PINGREQ и сообщения PINGRESP. Мы также обычно называем их контрольными сообщениями. сообщения.
Клиент регулярно отправляет на сервер сообщения PINGREQ, чтобы сервер мог знать, что соединение хорошее и клиент все еще активен. Каждый раз, когда получено сообщение PINGREQ, сервер отвечает сообщением PINGRESP, поэтому клиент также может знать, что соединение хорошее и сервер все еще активен.
Мы используем CLI MQTTX для инициирования клиентского соединения с общедоступным сервером MQTT без публикации сообщений или подписки на темы. Однако в Wireshark мы все равно видим, что между клиентом и сервером всегда происходит периодический обмен сообщениями MQTT. Эти сообщения являются сообщениями PINGREQ и PINGRESP.
Следующая команда создаст клиентское соединение с параметром Keep Alive в течение 5 секунд, что позволит нам увидеть, как клиент отправляет сообщения PINGREQ как можно скорее:
mqttx conn --hostname broker.emqx.io --mqtt-version 5 --keepalive 5
Мы обнаружим, что сообщения PINGREQ и PINGRESP всегда имеют размер всего 2 байта, и их содержимое, кажется, никогда не меняется:
# PINGREQ
c0 00
# PINGRESP
d0 00
Это дапотому что Эти два сообщения имеют очень простую структуру. сообщения。
Разница между сообщениями PINGREQ и PINGRESP заключается только в типе сообщения в фиксированном заголовке: 12 (0xC) указывает, что это сообщение PINGREQ, а 13 (0xD) указывает, что это сообщение PINGRESP.
потому что PINGREQ и PINGRESP 报文均不包含переменный заголовокиполезная нагрузка,Так что ихфиксированный заголовокЗначение оставшегося поля длины всегда равнода 0。
Этот вид Структура сообщения让 PINGREQ и PINGRESP Размеры сообщений сведены к минимуму, поэтому их отправка не занимает много трафика.
PINGREQ и PINGRESP да MQTT Самый простой тип сообщений среди них, их содержимое фиксировано. Единственное, что мы можем изменить, это когда да подключается через Варианты Keep Alive,Влияет на отправку клиентом PINGREQ Частота сообщений.
Если сервера нет 1.5 раз Keep Alive Если в течение этого времени будет получено какое-либо управляющее сообщение, отправленное клиентом, будет считаться, что клиент неактивен или сеть ненормальна, и соединение будет разорвано. Пример в этой статье сообщения, когда мы подключаемся Keep Alive установлен на 5 секунд, то период таймаута для сервера составляет да 7.5 Второй.
Клиент, если он не получает сообщение PINRESP, возвращенное сервером, в течение определенного периода времени после отправки сообщения PINGREQ, он должен отключиться. Продолжительность этого времени в основном зависит от ожидаемой клиентом задержки в сети и конкретной реализации каждого клиентского SDK.
Теперь, когда наше понимание сообщений MQTT продвинулось еще на шаг вперед, в следующей статье мы продолжим знакомить с сообщением DISCONNECT, используемым при отключении.