Client MQTT Delphi — Se connecter à n'importe quel broker MQTT 3.1 / 5.0

Un composant client MQTT 3.1.1 et MQTT 5.0 natif pour Delphi et C++Builder. Publish, subscribe, messages retained, last will, QoS 0/1/2, TLS, abonnements partagés et toute la surface des propriétés MQTT 5 — vérifié contre HiveMQ, Mosquitto, EMQX, AWS IoT Core et Azure IoT Hub.

Un client MQTT de premier ordre pour Pascal

MQTT est le protocole de messagerie de facto pour l'IoT, la télémétrie, le push mobile et les véhicules connectés. Apportez-le à votre base de code Delphi sans écrire un seul octet de framing.

Un client MQTT Delphi permet à votre application VCL ou FMX de parler le protocole OASIS MQTT — le protocole publish/subscribe léger conçu pour les appareils contraints et les réseaux à faible bande passante et forte latence. Avec sgcWebSockets, vous obtenez la surface client complète sous forme d'un seul composant non-visuel, TsgcWSPClient_MQTT, qui tourne de Delphi 7 à Delphi 13 et sur chaque plateforme cible Embarcadero (Win32, Win64, Linux64, macOS, iOS, Android).

Le composant implémente les deux versions majeures de MQTT dans le même chemin de code : le MQTT 3.1.1 déployé depuis longtemps (standard OASIS, utilisé par pratiquement tous les brokers IoT depuis 2014) et le MQTT 5.0 moderne (avec alias de topics, expiration de session, propriétés utilisateur, authentification améliorée, request/response et abonnements partagés). Une seule propriété — Version — bascule entre les deux.

Classe de composant

TsgcWSPClient_MQTT

Transports

TCP natif (1883 / 8883), WebSocket (80 / 443), TLS via OpenSSL ou SChannel

Versions

MQTT 3.1.1 et MQTT 5.0

Plateformes

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

Fonctionne avec chaque broker MQTT contre lequel nous testons

Un client conforme à la spec est, en principe, agnostique au broker — mais les brokers du monde réel ont des bizarreries. Nous testons chaque release contre les brokers que nos clients déploient réellement.

HiveMQ et HiveMQ Cloud

Surface complète des propriétés MQTT 5, abonnements partagés, auth améliorée et HiveMQ Cluster. Le tier Cloud gratuit est le moyen le plus facile d'essayer le composant de bout en bout.

Eclipse Mosquitto

Le broker open-source de référence. Faites-le tourner localement avec docker run -p 1883:1883 eclipse-mosquitto et vous avez une cible de développement en 30 secondes.

EMQX

Broker Erlang massivement scalable avec moteur de règles, bridges Kafka et abonnements partagés. Prêt pour la production à des millions de connexions.

AWS IoT Core

Certificats clients X.509, MQTT négocié par ALPN sur 443, WebSocket signé SigV4 et les quotas du broker AWS IoT. Voir la page dédiée AWS IoT Core.

Azure IoT Hub

Tokens SAS d'appareil, topics twin / direct-method, provisionnement DPS. Voir la page dédiée Azure IoT Hub.

Google Cloud IoT

Auth d'appareil basée sur JWT sur le port 8883. Le composant génère et fait tourner le JWT automatiquement.

RabbitMQ Web-MQTT

Le plugin Web-MQTT de RabbitMQ sur le port 15675 — même broker pour navigateurs et clients Delphi sur un seul port TLS.

VerneMQ, ActiveMQ, Artemis

Tous passent la suite de tests d'intégration. Coexistence multi-protocoles avec AMQP / STOMP / JMS gratuitement.

QoS, retained, will, TLS — toute la surface

Chaque fonctionnalité MQTT au niveau du fil est exposée comme propriété, méthode ou événement — rien d'enterré.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once avec PUBACK (QoS 1) et exactly-once avec le handshake quatre voies PUBREC → PUBREL → PUBCOMP (QoS 2). Choisissez par appel Publish().

Messages retained

Marquez une publication comme retained pour que le broker délivre la dernière valeur connue à tout futur abonné — le pattern standard pour les topics « état courant ».

Last Will & Testament

LastWillTestament enregistre un topic + payload que le broker publie si le client se déconnecte sans grâce — le signal canonique d'appareil hors-ligne.

Sessions clean / persistantes

Les abonnements et les messages QoS 1/2 non délivrés persistent à travers les reconnexions quand CleanSession est false — faites le pont avec une connectivité intermittente sans perdre de données.

TLS et mTLS

MQTTS sur 8883 avec OpenSSL ou SChannel. Chargez des certificats depuis le disque, le magasin de certificats Windows, des bundles PKCS#12 ou des tokens matériels.

Transport WebSocket

Branchez le composant dans un TsgcWebSocketClient pour faire tourner MQTT sur WSS sur le port 443 — passez à travers n'importe quel load balancer ou proxy d'entreprise HTTP-aware.

Propriétés MQTT 5

Expiration de session, receive maximum, taille maximale de paquet, topic alias maximum, propriétés utilisateur, response info — sur chaque CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Abonnements partagés

$share/<group>/<topic> round-robine les messages entrants sur un pool de workers — passage à l'échelle horizontal gratuit.

Reconnexion WatchDog

Reconnexion automatique avec backoff exponentiel ; les abonnements et publications QoS 1/2 en file sont rejoués à la reprise.

De zéro à une boucle publish/subscribe

Déposez le composant, branchez deux événements, définissez 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;

Authentification et sécurité du transport

Les quatre patterns d'authentification de broker sont supportés d'office : simple username/password (envoyé à l'intérieur du paquet CONNECT), certificats clients X.509 (mTLS), JWT (Google Cloud IoT, brokers personnalisés) et tokens SAS (Azure IoT Hub). L'authentification améliorée MQTT 5 expose le paquet AUTH via OnMQTTAuth pour les flux challenge/response style SCRAM.

Pour le transport, vous pouvez faire tourner MQTT-sur-TCP natif sur les ports standards 1883 (clair) ou 8883 (TLS), ou tunnelliser MQTT à travers un WebSocket (la propriété Client accepte tout TsgcWebSocketClient) pour traverser les firewalls HTTP-seulement stricts et les edges CDN. Les deux options utilisent le même composant et les mêmes événements.

Plus sur MQTT dans sgcWebSockets

Page protocole MQTT

Référence complète pour TsgcWSPClient_MQTT — propriétés, méthodes, événements, toutes les fonctionnalités du sous-protocole.

Brokers IoT cloud

Pages dédiées pour AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Sélecteur temps réel

Quand choisir MQTT plutôt que WebSocket, SSE, AMQP ou HTTP/2 push.

Blog : Request/response sur MQTT

Utiliser ResponseTopic + CorrelationData de MQTT 5 pour des RPC asynchrones.

Blog : AWS IoT avec SigV4

Auth WebSocket signée contre AWS IoT Core.

Blog : Auth personnalisée AWS IoT

Auth basée sur tokens via l'autoriseur personnalisé AWS IoT.

Commencez à publier en 5 minutes

Prenez l'essai, pointez sur broker.hivemq.com:1883 et exécutez le projet de démo inclus.