Klient MQTT dla Delphi — Łącz z dowolnym brokerem MQTT 3.1 / 5.0

Natywny komponent klienta MQTT 3.1.1 i MQTT 5.0 dla Delphi i C++Builder. Publikuj, subskrybuj, retained messages, last will, QoS 0/1/2, TLS, shared subscriptions i pełna powierzchnia właściwości MQTT 5 — zweryfikowane wobec HiveMQ, Mosquitto, EMQX, AWS IoT Core i Azure IoT Hub.

Klient MQTT pierwszej klasy dla Pascala

MQTT to faktyczny protokół komunikatów dla IoT, telemetrii, mobilnego push i pojazdów połączonych. Wprowadź go do swojej bazy kodu Delphi bez pisania ani bajtu ramkowania.

Klient MQTT dla Delphi pozwala Twojej aplikacji VCL lub FMX mówić protokołem OASIS MQTT — lekkim protokołem publish/subscribe zaprojektowanym dla ograniczonych urządzeń i sieci o niskiej przepustowości i wysokiej latencji. Z sgcWebSockets dostajesz kompletną powierzchnię klienta jako pojedynczy niewizualny komponent, TsgcWSPClient_MQTT, który działa na Delphi 7 do Delphi 13 i na każdej platformie docelowej Embarcadero (Win32, Win64, Linux64, macOS, iOS, Android).

Komponent implementuje obie główne wersje MQTT w tej samej ścieżce kodu: długo wdrażane MQTT 3.1.1 (standard OASIS, używany przez praktycznie każdy broker IoT od 2014 roku) i nowoczesne MQTT 5.0 (z topic aliases, session expiry, user properties, enhanced authentication, request/response i shared subscriptions). Pojedyncza właściwość — Version — przełącza między nimi.

Klasa komponentu

TsgcWSPClient_MQTT

Transporty

Natywne TCP (1883 / 8883), WebSocket (80 / 443), TLS przez OpenSSL lub SChannel

Wersje

MQTT 3.1.1 i MQTT 5.0

Platformy

Windows, macOS, Linux, iOS, Android, .NET

Działa z każdym brokerem MQTT, wobec którego testujemy

Zgodny ze specyfikacją klient jest w zasadzie agnostyczny wobec brokera — ale rzeczywiste brokery mają dziwactwa. Testujemy każde wydanie wobec brokerów, które nasi klienci faktycznie wdrażają.

HiveMQ i HiveMQ Cloud

Pełna powierzchnia właściwości MQTT 5, shared subscriptions, enhanced auth i HiveMQ Cluster. Darmowy poziom Cloud to najłatwiejszy sposób, by spróbować komponentu end-to-end.

Eclipse Mosquitto

Referencyjny broker open-source. Uruchom go lokalnie z docker run -p 1883:1883 eclipse-mosquitto i masz cel deweloperski w 30 sekund.

EMQX

Masowo skalowalny broker Erlang z silnikiem reguł, mostami Kafka i shared subscriptions. Gotowy do produkcji przy milionach połączeń.

AWS IoT Core

Certyfikaty klienta X.509, ALPN-negocjowane MQTT na 443, SigV4-podpisany WebSocket i kwoty brokera AWS IoT. Zobacz dedykowaną stronę AWS IoT Core.

Azure IoT Hub

Tokeny SAS urządzeń, tematy twin / direct-method, provisioning DPS. Zobacz dedykowaną stronę Azure IoT Hub.

Google Cloud IoT

Uwierzytelnianie urządzeń oparte na JWT na porcie 8883. Komponent automatycznie generuje i rotuje JWT.

RabbitMQ Web-MQTT

Plugin RabbitMQ Web-MQTT na porcie 15675 — ten sam broker dla przeglądarek i klientów Delphi przez pojedynczy port TLS.

VerneMQ, ActiveMQ, Artemis

Wszystkie przechodzą pakiet testów integracyjnych. Wielo-protokołowe współistnienie z AMQP / STOMP / JMS za darmo.

QoS, retained, will, TLS — pełna powierzchnia

Każda funkcja MQTT na poziomie protokołu jest udostępniona jako właściwość, metoda lub zdarzenie — nic zakopanego.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once z PUBACK (QoS 1) i exactly-once z czterodrożnym handshake PUBREC → PUBREL → PUBCOMP (QoS 2). Wybierz per wywołanie Publish().

Retained messages

Oznacz publikację jako retained, by broker dostarczył ostatnią znaną wartość każdemu przyszłemu subskrybentowi — standardowy wzorzec dla tematów „bieżący stan”.

Last Will i Testament

LastWillTestament rejestruje topic + ładunek, który broker publikuje, jeśli klient niegracefulnie się rozłączy — kanoniczny sygnał urządzenie-offline.

Sesje clean / persistent

Subskrypcje i niedostarczone wiadomości QoS 1/2 utrzymują się przez ponowne łączenia, gdy CleanSession jest false — mostkuj sporadyczne połączenia bez utraty danych.

TLS i mTLS

MQTTS na 8883 z OpenSSL lub SChannel. Ładuj certyfikaty z dysku, Windows certificate store, pakietów PKCS#12 lub tokenów sprzętowych.

Transport WebSocket

Podłącz komponent do TsgcWebSocketClient, by uruchomić MQTT nad WSS na porcie 443 — przejdź przez dowolny load balancer świadomy HTTP lub firmowe proxy.

Właściwości MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, user properties, response info — na każdym CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Shared subscriptions

$share/<group>/<topic> round-robinuje przychodzące wiadomości po puli pracowników — skalowanie poziome za darmo.

Ponowne łączenie WatchDog

Automatyczne ponowne łączenie z wykładniczym backoff; subskrypcje i kolejkowane publikacje QoS 1/2 są odtwarzane przy wznowieniu.

Od zera do pętli publish/subscribe

Upuść komponent, podepnij dwa zdarzenia, ustaw Active.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.hivemq.com';
  WSClient.Port := 1883;
  WSClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client  := WSClient;
  MQTT.Version := mqtt50;
  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  WSClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/+/temperature', mtqsAtLeastOnce);

  // Retained “online” message
  MQTT.Publish('devices/sensor-01/status',
    'online', mtqsAtLeastOnce, True);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;

Uwierzytelnianie i bezpieczeństwo transportu

Wszystkie cztery wzorce uwierzytelniania brokera są wspierane od razu po instalacji: prosta nazwa użytkownika/hasło (wysłane wewnątrz pakietu CONNECT), certyfikaty klienta X.509 (mTLS), JWT (Google Cloud IoT, niestandardowe brokery) i tokeny SAS (Azure IoT Hub). Enhanced authentication MQTT 5 udostępnia pakiet AUTH przez OnMQTTAuth dla przepływów challenge/response w stylu SCRAM.

Dla transportu możesz uruchomić natywne MQTT-over-TCP na standardowych portach 1883 (clear) lub 8883 (TLS), lub tunelować MQTT przez WebSocket (właściwość Client akceptuje dowolny TsgcWebSocketClient), aby przejść przez ścisłe firewalle tylko-HTTP i krawędzie CDN. Obie opcje używają tego samego komponentu i tych samych zdarzeń.

Więcej o MQTT w sgcWebSockets

Strona protokołu MQTT

Pełna referencja dla TsgcWSPClient_MQTT — właściwości, metody, zdarzenia, wszystkie funkcje podprotokołu.

Brokery IoT w chmurze

Dedykowane strony dla AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Wybór czasu rzeczywistego

Kiedy wybrać MQTT zamiast WebSocket, SSE, AMQP lub HTTP/2 push.

Blog: Request/response nad MQTT

Użycie MQTT 5 ResponseTopic + CorrelationData dla asynchronicznego RPC.

Blog: AWS IoT z SigV4

Podpisany WebSocket auth wobec AWS IoT Core.

Blog: AWS IoT custom auth

Uwierzytelnianie oparte na tokenach przez AWS IoT custom authoriser.

Zacznij publikować w 5 minut

Chwyć wersję próbną, wskaż na broker.hivemq.com:1883 i uruchom dołączony projekt demo.