Protocole MQTT

Client MQTT 3.1.1 et MQTT 5.0 natif pour Delphi, C++Builder et .NET. Messaging publish-subscribe sur WebSocket ou TCP brut avec QoS 0/1/2, messages retenus, last will, alias de topics et abonnements partagés.

Client de sous-protocole MQTT

Une implémentation MQTT de premier ordre qui s'exécute partout où tourne le runtime Delphi / .NET — des services desktop aux appareils mobiles, dialoguant avec tout broker MQTT conforme aux spécifications.

Classe du composant

TsgcWSPClient_MQTT

Standards

MQTT 3.1.1 & MQTT 5.0

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

Standard / Professional / Enterprise

Surface complète de MQTT 3.1.1 & 5.0

Toutes les fonctionnalités du protocole MQTT — pas seulement publish et subscribe.

QoS 0, 1 & 2

Livraison fire-and-forget, at-least-once et exactly-once. Le handshake à quatre étapes de QoS 2 (PUBLISH → PUBREC → PUBREL → PUBCOMP) est entièrement exposé via des événements pour la logique de réessai / audit.

WebSocket ou TCP brut

Branche la propriété Client sur un TsgcWebSocketClient pour exécuter MQTT sur WebSockets, ou utilise le transport TCP MQTT natif sur le port 1883 / 8883 — même composant, même API.

Messages retenus

Marque les publications comme retenues afin que le broker délivre la dernière valeur connue à tout futur abonné. Active ou désactive retain à chaque appel sur Publish.

Last Will & Testament

LastWillTestament enregistre un topic + payload que le broker publiera si le client se déconnecte brutalement — la manière canonique de signaler les événements device-offline.

Abonnements avec wildcards

Filtres de topic avec les wildcards + (un seul niveau) et # (multi-niveaux) : sensors/+/temperature ou devices/#.

Propriétés MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, request response info, user properties — tous accessibles via ConnectProperties, PublishProperties et SubscribeProperties.

Alias de topics

MQTT 5 permet au client (et au broker) de remplacer de longs noms de topic par un alias entier de 2 octets pour les publications répétées — d'énormes économies pour les flux de télémétrie bavards.

Abonnements partagés

MQTT 5 $share/<group>/<topic> distribue les messages entrants en round-robin sur un groupe d'abonnés — la brique de base pour des pools de workers horizontaux.

Request / response

Les propriétés MQTT 5 ResponseTopic et CorrelationData transforment le pub-sub en RPC asynchrone — intégré aux événements sans framing supplémentaire.

Authentification renforcée

Paquet AUTH de MQTT 5 avec AuthenticationMethod / AuthenticationData pour les challenges de type SCRAM — appelle Auth, gère OnMQTTAuth.

Keep-alive & WatchDog

HeartBeat envoie des PINGREQ à un intervalle paramétrable. Le WatchDog se reconnecte automatiquement avec backoff exponentiel et reprend les abonnements.

TLS via OpenSSL ou SChannel

Exécute MQTTS sur 8883 (TCP brut+TLS) ou WSS sur 443 avec certificats client. TLSOptions.IOHandler sélectionne OpenSSL (multi-plateforme) ou SChannel (TLS kernel Windows).

Là où MQTT brille

Framing léger, faible surcharge et sessions à état font de MQTT le choix par défaut pour ces scénarios.

Télémétrie IoT

Les capteurs diffusent des relevés de température, vibration, GPS et batterie via des sessions MQTT keep-alive — même sur des liens LTE/Cat-M/NB-IoT instables.

Véhicules connectés & flottes

Canal de commande bidirectionnel avec QoS 1 pour trackers de flotte, passerelles OBD et bornes de recharge VE — reconnect-and-resume sans perdre de publications.

Industriel / SCADA

Remplace le polling OPC-UA par du publish-subscribe événementiel. Les alias de topics et abonnements partagés montent à l'échelle de milliers de PLC et appareils de terrain.

Maison & bâtiment intelligents

Éclairage, HVAC, serrures et capteurs de présence dialoguant via Mosquitto ou Home Assistant — le client Delphi s'intègre aussi facilement que n'importe quel nœud embarqué.

Plateformes IoT cloud

Le même composant dialogue avec AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud et EMQX — avec certificats client X.509 ou jetons SAS.

Tableaux de bord web / navigateur

MQTT-over-WebSocket sur RabbitMQ Web-MQTT (port 15675) permet au même broker de pousser vers les clients Delphi et les dashboards JS sur un unique port TLS.

Push & présence mobile

Des sessions MQTT longue durée sur iOS/Android avec Last Will te donnent présence et push léger sans fournisseur propriétaire.

Fan-out de microservices

Découple producteurs et consommateurs via un broker central. Les abonnements partagés répartissent le travail en round-robin sur un pool de services workers Delphi.

Fonctionne avec tous les brokers MQTT majeurs

Client conforme aux spécifications — vérifié face aux brokers que nos clients déploient réellement.

AWS IoT Core

Certificats client X.509, SigV4 sur WebSocket et quotas du broker AWS IoT. Voir la page dédiée AWS IoT.

Azure IoT Hub

Jetons SAS device, topics de twin/method et provisioning DPS. Voir la page Azure IoT Hub.

HiveMQ & HiveMQ Cloud

Surface complète des propriétés MQTT 5, abonnements partagés, authentification renforcée et HiveMQ Cluster.

Mosquitto

Le broker open-source de référence — à la fois MQTT 3.1.1 et 5.0, sur TCP ou WebSocket.

EMQX

Broker massivement scalable avec abonnements partagés, moteur de règles et bridge vers Kafka. Drop-in.

RabbitMQ Web-MQTT

Plugin MQTT-over-WebSocket sur le port 15675 — l'association standard pour les dashboards navigateur + Delphi.

VerneMQ

Broker MQTT clusterisé bâti sur Erlang/OTP — les modes MQTT 3.1.1 et 5.0 passent tous deux la suite de tests.

ActiveMQ & Artemis

Le listener MQTT intégré d'Apache ActiveMQ et le broker Artemis — coexistence multi-protocole avec AMQP, STOMP et JMS.

Dépose le composant, configure quelques propriétés, c'est parti

Associe un TsgcWebSocketClient à TsgcWSPClient_MQTT, branche OnMQTTConnect / OnMQTTPublish, puis Subscribe et Publish.

uses
  sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client,
  sgcWebSocket_Protocol_MQTT_Message;

var
  WSClient: TsgcWebSocketClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'www.esegece.com';
  WSClient.Port := 15675;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := WSClient;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  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/#');
end;

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

// Publier un message QoS 1 retenu
MQTT.Publish('sensors/temperature/room1',
  '{"value":22.5,"unit":"C"}', mtqsAtLeastOnce, True);
// uses : sgcWebSocket, sgcWebSocket_Protocol_MQTT_Client
TsgcWebSocketClient *WSClient = new TsgcWebSocketClient(this);
WSClient->Host = "www.esegece.com";
WSClient->Port = 15675;

TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = WSClient;
MQTT->Authentication->Enabled  = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";

MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;

WSClient->Active = true;

void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
    UnicodeString aTopic, UnicodeString aText,
    TsgcWSMQTTPublishProperties PublishProperties)
{
  Memo1->Lines->Add(aTopic + ": " + aText);
}

MQTT->Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", mtqsAtLeastOnce, true);
using esegece.sgcWebSockets;

var WSClient = new TsgcWebSocketClient();
WSClient.Options.Parameters = "/ws";

var MQTT = new TsgcWSPClient_MQTT();
MQTT.Client = WSClient;
MQTT.Authentication.Enabled  = true;
MQTT.Authentication.UserName = "sgc";
MQTT.Authentication.Password = "sgc";
MQTT.HeartBeat.Enabled  = true;
MQTT.HeartBeat.Interval = 5;

MQTT.OnMQTTConnect += (conn, session, code, name, props) => MQTT.Subscribe("sensors/temperature/#");
MQTT.OnMQTTPublish += (conn, topic, text, props) => Console.WriteLine(topic + ": " + text);

WSClient.Host = "www.esegece.com";
WSClient.Port = 15675;
WSClient.Active = true;

MQTT.Publish("sensors/temperature/room1",
  "{\"value\":22.5,\"unit\":\"C\"}", TmqttQoS.mtqsAtLeastOnce, true);

Spécifications & références

Sources faisant autorité pour les protocoles que ce composant implémente.

Documentation & démos

Lien direct vers la référence du composant, récupère le projet de démo prêt à l'emploi et télécharge l'essai.

Aide en ligne — Protocol_MQTT Référence complète des propriétés, méthodes et événements pour ce composant.
Projet de démo — Demos\Protocols\MQTT Projet d'exemple prêt à l'emploi. Livré dans le package sgcWebSockets — télécharge l'essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code pour Delphi, C++ Builder et .NET, et références aux sources primaires — ce composant uniquement.
Manuel utilisateur (PDF) Manuel exhaustif couvrant chaque composant de la bibliothèque.

Prêt à démarrer avec MQTT ?

Télécharge l'essai gratuit et commence à bâtir des solutions de messaging IoT en quelques minutes.