Przejdź do treści

O MQTT

MQTT to protokół transportowy oparty na strukturze klient-serwer, który używa wzorca publikuj/subskrybuj. Jest lekki i zawiera funkcje, które pozwalają na efektywne wykorzystanie go w środowisku o ograniczonej przepustowości i/lub dużym opóźnieniu.

Klienty mogą, m.in.:

  • Subskrybować tematy - żądają od serwera wysyłania im wiadomości przychodzących na wybrane tematy.
  • Anulować subskrypcję tematu - żądają od serwera, aby nie wysyłał im już wiadomości z wybranych tematów.
  • Publikować wiadomości - wyślij wiadomość na wybrany temat do serwera, który następnie wyśle wiadomość do wszystkich klientów, którzy zasubskrybowali temat.

Tematy

Tematy mają strukturę hierarchiczną tak, że jeden temat może mieć swoie elementy zależne (podtematy). Dzięki temu możliwe jest organizowanie wiadomości w grupy, gdzie każda grupa może mieć własne podgrupy i tak dalej. Poziomy w tematach są rozdzielone za pomocą /, a każdy poziom to ciąg znaków, np. A / B ma dwa poziomy A i podpoziom B. Jest to ważne w przypadku subskrypcji, które przy pomocy znaków specjalnych mogą obejmować wiele tematów.

Te znaki specjalne to:

+
obejmuje jeden poziom i musi być jedynym znakiem na tym poziomie. W rezultacie, tematy które mają różne kombinacje znaków w miejscu + będą się zawierały w subskrypcji z tym znakiem. Innymi słowy oznacza to tyle, że w miejsce + można wstawić dowolną wartość. Na przykład: tematy a/b/c/d, a/b/e/d będą pasowały do subskrypcji a/b/+/d ale tematy a/b/c lub a/b/c/d/e już nie.
#
obejmuje wiele poziomów, ale musi być ostatnim znakiem w całym temacie subskrypcji. Znak ten będzie akceptował wszystkie inne znaki, a nawet wiele poziomów, np. subskrypcja a/# obejmie w sobie tematy a/b, a/b/c, a/b/c, ale nie b/c.

Oba znaki specjalne (+ and #) mogą być stosowane razem w jednej subskrypcji, np. a/+/c/# zawrze w sobie a/b/c/d, a/d/c/f.

Nasz serwer

Jako serwera MQTT używamy Mosquitto (więcej na jego temat tutaj). Nasłuch jest uruchomiony na kilku portach:

  • 1883 - bez szyfrowania, wymaga uwierzytelnienia
  • 8883 - z szyfrownaiem (SSL), wymaga uwierzytelnienia
  • 9001 - WebSockets bez szyfrowania, wymaga uwierzytelnienia
  • 9002 - WebSockets z szyfrowaniem (SSL), wymaga uwierzytelnienia

Więcej

Bardziej szczegółowe informacje na temat protokołu MQTT możesz znaleźć w: