Две версии сразу
MQTT 3.1.1 и MQTT 5.0 работают одновременно на одном порту, клиенты разных версий свободно обмениваются сообщениями. Кодек разбирает и собирает все 15 типов пакетов, проверяет границы Variable Byte Integer, дубли свойств и зарезервированные биты.
QoS 0, 1 и 2
Полные рукопожатия, подавление дублей на QoS 2, переотправка незавершённых обменов после переподключения. Оффлайн-очереди постоянных сессий переживают перезапуск брокера.
Retain и Last Will
Retain-хранилище с очисткой пустым payload, в том числе ветками, Retain Handling 0/1/2 и Retain As Published. Will отправляется во всех сценариях разрыва, включая Will Delay Interval у пятой версии.
Возможности пятой версии
Псевдонимы тем в обе стороны, Session Expiry, Receive Maximum и контроль потока, Maximum Packet Size, идентификаторы подписок, общие подписки $share, No Local, Message Expiry, Payload Format Indicator с проверкой UTF-8, Content Type, Response Topic, Correlation Data, User Properties, коды причин во всех пакетах, серверный DISCONNECT, пакет AUTH.
Системные темы $SYS
Версия, аптайм, счётчики клиентов, сообщений, байт и ошибок публикуются retain-сообщениями. Ветка закрыта по умолчанию: подстановки не достают до $-тем, анонимным клиентам весь namespace запрещён, а рубильник в настройках выключает публикацию целиком.