MQTT

MQTT (Message Queuing Telemetry Transport) — лёгкий pub/sub-протокол для IoT. IBM (1999), потом OASIS. Топики иерархичные, QoS-уровни, tiny binary header (2 байта минимум). Дефолт для миллиардов IoT-устройств.

Модель

[Publisher] → [Broker (Mosquitto/HiveMQ/EMQX)] → [Subscriber]

topic: sensors/room1/temperature
value: 22.5°C

Топики и wildcards

QoS levels

QoSСемантика
0at most once (fire-and-forget)
1at least once (может дублировать)
2exactly once (4-way handshake)

Пакет

| fixed header (2+ B) | variable header | payload |

Fixed header:
  byte 1: message type (4 bit) + flags (4 bit)
  byte 2+: remaining length (variable-length int)

Handshake CONNECT

C → B: CONNECT {
  client_id: "sensor-42",
  keep_alive: 60,
  username, password,
  will: {topic:"sensor/42/status", payload:"offline", retain:true}
}
B → C: CONNACK { return_code:0 }
C → B: SUBSCRIBE topic="cmd/sensor/42/#" qos=1
C → B: PUBLISH topic="sensor/42/temp" payload="22.5"

Last Will and Testament (LWT)

Если клиент отвалился без DISCONNECT, брокер публикует LWT-сообщение. Все subscribers мгновенно знают "устройство offline".

Retained message

publish("sensor/42/temp", "22.5", retain=true)
# новый subscriber на этот topic сразу получит последнее значение

Часто для "current state". Retained сохраняется на брокере.

MQTT 5.0

2019, OASIS. Новое: user properties, reason codes, shared subscriptions ($share/group/topic — распределение как Kafka), request/response через correlation-data, session/message expiry, auth flows.

MQTT over WebSocket / SSE / QUIC

Брокеры

Порты

См. также

← на главную