Client MQTT Delphi — connettiti a qualsiasi broker MQTT 3.1 / 5.0

Un componente client MQTT 3.1.1 e MQTT 5.0 nativo per Delphi e C++Builder. Publish, subscribe, messaggi retained, last will, QoS 0/1/2, TLS, sottoscrizioni condivise e tutta la superficie delle property MQTT 5 — verificato contro HiveMQ, Mosquitto, EMQX, AWS IoT Core e Azure IoT Hub.

Un client MQTT di prima classe per Pascal

MQTT è il protocollo di messaging de-facto per IoT, telemetria, push mobile e veicoli connessi. Portalo nella tua codebase Delphi senza scrivere un solo byte di framing.

Un client MQTT Delphi consente alla tua applicazione VCL o FMX di parlare il protocollo OASIS MQTT — il protocollo publish/subscribe leggero progettato per dispositivi vincolati e reti a banda stretta e alta latenza. Con sgcWebSockets ottieni l'intera superficie client come un singolo componente non visuale, TsgcWSPClient_MQTT, che gira da Delphi 7 a Delphi 13 e su ogni piattaforma target Embarcadero (Win32, Win64, Linux64, macOS, iOS, Android).

Il componente implementa entrambe le versioni principali di MQTT nello stesso flusso di codice: il consolidato MQTT 3.1.1 (standard OASIS, usato da praticamente ogni broker IoT dal 2014) e il moderno MQTT 5.0 (con topic alias, scadenza della sessione, user property, autenticazione avanzata, request/response e sottoscrizioni condivise). Una sola proprietà — Version — passa dall'una all'altra.

Classe del componente

TsgcWSPClient_MQTT

Trasporti

TCP nativo (1883 / 8883), WebSocket (80 / 443), TLS via OpenSSL o SChannel

Versioni

MQTT 3.1.1 e MQTT 5.0

Piattaforme

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

Funziona con ogni broker MQTT contro cui testiamo

Un client conforme alla specifica è, in linea di principio, broker-agnostic — ma i broker reali hanno le loro stranezze. Testiamo ogni release contro i broker che i nostri clienti effettivamente deployano.

HiveMQ e HiveMQ Cloud

Intera superficie delle property MQTT 5, sottoscrizioni condivise, autenticazione avanzata e HiveMQ Cluster. Il tier Cloud gratuito è il modo più semplice per provare il componente end-to-end.

Eclipse Mosquitto

Il broker open-source di riferimento. Eseguilo in locale con docker run -p 1883:1883 eclipse-mosquitto e hai un target di sviluppo in 30 secondi.

EMQX

Broker Erlang scalabile in modo massiccio con rule engine, bridge Kafka e sottoscrizioni condivise. Pronto per la produzione su milioni di connessioni.

AWS IoT Core

Certificati client X.509, MQTT negoziato via ALPN sulla 443, WebSocket firmato SigV4 e le quote del broker AWS IoT. Vedi la pagina dedicata AWS IoT Core.

Azure IoT Hub

SAS token per device, topic twin / direct-method, provisioning DPS. Vedi la pagina dedicata Azure IoT Hub.

Google Cloud IoT

Autenticazione device basata su JWT sulla porta 8883. Il componente genera e ruota il JWT automaticamente.

RabbitMQ Web-MQTT

Il plugin Web-MQTT di RabbitMQ sulla porta 15675 — stesso broker per browser e client Delphi su una singola porta TLS.

VerneMQ, ActiveMQ, Artemis

Tutti superano la suite di test di integrazione. Coesistenza multi-protocollo con AMQP / STOMP / JMS gratis.

QoS, retained, will, TLS — tutta la superficie

Ogni funzionalità MQTT a livello di protocollo è esposta come proprietà, metodo o evento — nulla è nascosto.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once con PUBACK (QoS 1) ed exactly-once con l'handshake a quattro fasi PUBREC → PUBREL → PUBCOMP (QoS 2). Scegli per ogni chiamata Publish().

Messaggi retained

Marca una pubblicazione come retained affinché il broker consegni l'ultimo valore noto a ogni futuro subscriber — il pattern standard per i topic di “stato corrente”.

Last Will & Testament

LastWillTestament registra un topic + payload che il broker pubblica se il client cade in modo non grazioso — il classico segnale di device offline.

Sessioni clean / persistenti

Sottoscrizioni e messaggi QoS 1/2 non consegnati persistono attraverso le riconnessioni quando CleanSession è false — supera la connettività intermittente senza perdere dati.

TLS e mTLS

MQTTS sulla 8883 con OpenSSL o SChannel. Carica certificati da disco, dal Windows certificate store, da bundle PKCS#12 o da token hardware.

Trasporto WebSocket

Collega il componente a un TsgcWebSocketClient per eseguire MQTT su WSS sulla porta 443 — attraversa qualunque load balancer HTTP-aware o proxy aziendale.

Property MQTT 5

Scadenza della sessione, receive maximum, dimensione massima del pacchetto, massimo numero di topic alias, user property, response info — su ogni CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Sottoscrizioni condivise

$share/<group>/<topic> distribuisce a round-robin i messaggi in arrivo su un pool di worker — scale-out orizzontale gratis.

Riconnessione WatchDog

Riconnessione automatica con back-off esponenziale; sottoscrizioni e pubblicazioni QoS 1/2 in coda vengono rigiocate alla ripresa.

Da zero a un loop publish/subscribe

Inserisci il componente, collega due eventi, imposta 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;

Autenticazione e sicurezza del trasporto

Tutti e quattro i pattern di autenticazione dei broker sono supportati out-of-the-box: username/password semplice (inviati dentro il pacchetto CONNECT), certificati client X.509 (mTLS), JWT (Google Cloud IoT, broker custom) e SAS token (Azure IoT Hub). L'autenticazione avanzata di MQTT 5 espone il pacchetto AUTH tramite OnMQTTAuth per flussi di challenge/response in stile SCRAM.

Per il trasporto, puoi eseguire MQTT-su-TCP nativo sulle porte standard 1883 (in chiaro) o 8883 (TLS), oppure tunnelizzare MQTT attraverso un WebSocket (la proprietà Client accetta qualunque TsgcWebSocketClient) per attraversare firewall HTTP-only stringenti e edge CDN. Entrambe le opzioni usano lo stesso componente e gli stessi eventi.

Altro su MQTT in sgcWebSockets

Pagina del protocollo MQTT

Riferimento completo per TsgcWSPClient_MQTT — proprietà, metodi, eventi, tutte le funzionalità del sotto-protocollo.

Broker IoT cloud

Pagine dedicate per AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Scelta del protocollo real-time

Quando scegliere MQTT rispetto a WebSocket, SSE, AMQP o push HTTP/2.

Blog: request/response su MQTT

Usare ResponseTopic + CorrelationData di MQTT 5 per RPC asincrono.

Blog: AWS IoT con SigV4

Autenticazione WebSocket firmata contro AWS IoT Core.

Blog: AWS IoT custom auth

Autenticazione basata su token tramite il custom authorizer di AWS IoT.

Inizia a pubblicare in 5 minuti

Prendi la trial, punta a broker.hivemq.com:1883 ed esegui il progetto demo incluso.