Protocollo MQTT

Client MQTT 3.1.1 e MQTT 5.0 nativo per Delphi, C++Builder e .NET. Messaging publish-subscribe su WebSocket o TCP nativo con QoS 0/1/2, messaggi retained, last will, topic alias e subscription condivise.

Client per il subprotocollo MQTT

Un'implementazione MQTT di prima classe che gira ovunque giri il runtime Delphi / .NET — dai servizi desktop ai dispositivi mobili, dialogando con qualsiasi broker MQTT conforme allo standard.

Classe del componente

TsgcWSPClient_MQTT

Standard

MQTT 3.1.1 & MQTT 5.0

Piattaforme

Windows, macOS, Linux, iOS, Android

Edizione

Standard / Professional / Enterprise

Copertura completa di MQTT 3.1.1 e 5.0

Ogni funzionalità a livello di protocollo di MQTT — non solo publish e subscribe.

QoS 0, 1 e 2

Consegna fire-and-forget, at-least-once ed exactly-once. L'handshake a quattro vie di QoS 2 (PUBLISH → PUBREC → PUBREL → PUBCOMP) è completamente esposto tramite eventi per la logica di retry e audit.

WebSocket o TCP nativo

Collegando la proprietà Client a un TsgcWebSocketClient si fa girare MQTT su WebSocket, oppure si usa il trasporto MQTT TCP nativo sulle porte 1883 / 8883 — stesso componente, stessa API.

Messaggi retained

Si possono contrassegnare le pubblicazioni come retained affinché il broker consegni l'ultimo valore noto a qualsiasi nuovo subscriber. Impostare o azzerare il flag retain in ogni chiamata a Publish.

Last Will and Testament

LastWillTestament registra un topic e un payload che il broker pubblicherà se il client si disconnette in modo non controllato — il modo canonico per segnalare gli eventi di dispositivo offline.

Subscription con wildcard

Filtri di topic con wildcard + (singolo livello) e # (multilivello): sensors/+/temperature oppure devices/#.

Proprietà MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, request response info, user properties — tutte accessibili tramite ConnectProperties, PublishProperties e SubscribeProperties.

Topic alias

MQTT 5 consente al client (e al broker) di sostituire i nomi di topic lunghi con un alias intero a 2 byte per le pubblicazioni ripetute — un enorme risparmio per i flussi di telemetria più verbosi.

Subscription condivise

La sintassi MQTT 5 $share/<group>/<topic> distribuisce i messaggi in arrivo in round-robin su un gruppo di subscriber — il mattone fondamentale per i pool di worker orizzontali.

Request / response

Le proprietà ResponseTopic e CorrelationData di MQTT 5 trasformano il pub-sub in RPC asincrona — integrate negli eventi senza alcun framing aggiuntivo.

Enhanced auth

Pacchetto AUTH di MQTT 5 con AuthenticationMethod / AuthenticationData per challenge in stile SCRAM — sufficiente chiamare Auth e gestire OnMQTTAuth.

Keep-alive e WatchDog

HeartBeat invia PINGREQ a un intervallo configurabile. Il WatchDog si riconnette automaticamente con backoff esponenziale e ripristina le subscription.

TLS tramite OpenSSL o SChannel

È possibile far girare MQTTS sulla porta 8883 (TCP nativo+TLS) o WSS sulla 443 con certificati client. TLSOptions.IOHandler seleziona OpenSSL (cross-platform) o SChannel (TLS del kernel di Windows).

Dove MQTT eccelle

Framing leggero, basso overhead e sessioni con stato rendono MQTT la scelta naturale per questi scenari.

Telemetria IoT

I sensori trasmettono in streaming temperatura, vibrazioni, GPS e livello di batteria su sessioni MQTT con keep-alive — anche su link LTE/Cat-M/NB-IoT instabili.

Veicoli connessi e flotte

Canale di comando bidirezionale con QoS 1 per tracker di flotta, gateway OBD e stazioni di ricarica per veicoli elettrici — riconnessione e ripresa senza perdere pubblicazioni.

Industria / SCADA

Sostituisca il polling OPC-UA con il publish-subscribe event-driven. I topic alias e le subscription condivise scalano fino a migliaia di PLC e dispositivi di campo.

Casa e edificio intelligente

Illuminazione, HVAC, serrature e sensori di presenza che dialogano tramite Mosquitto o Home Assistant — il client Delphi si integra con la stessa facilità di qualsiasi nodo embedded.

Piattaforme Cloud IoT

Lo stesso componente dialoga con AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud ed EMQX — con certificati client X.509 o token SAS.

Dashboard Web / browser

MQTT su WebSocket con RabbitMQ Web-MQTT (porta 15675) consente allo stesso broker di inviare dati ai client Delphi e alle dashboard JS attraverso un'unica porta TLS.

Push e presenza mobile

Sessioni MQTT di lunga durata su iOS/Android con Last Will offrono presenza e push leggero senza dipendere da un provider specifico.

Fan-out di microservizi

Disaccoppia producer e consumer tramite un broker centrale. Le subscription condivise distribuiscono il lavoro in round-robin su un pool di servizi worker Delphi.

Compatibile con tutti i principali broker MQTT

Client conforme alle specifiche — verificato sui broker che i nostri clienti realmente utilizzano in produzione.

AWS IoT Core

Certificati client X.509, SigV4 su WebSocket e quote del broker AWS IoT. Veda la pagina dedicata AWS IoT.

Azure IoT Hub

Token Device-SAS, topic per twin/method e provisioning DPS. Veda la pagina Azure IoT Hub.

HiveMQ e HiveMQ Cloud

Copertura completa delle proprietà MQTT 5, subscription condivise, enhanced auth e HiveMQ Cluster.

Mosquitto

Il broker open source di riferimento — sia MQTT 3.1.1 sia 5.0, su TCP o WebSocket.

EMQX

Broker estremamente scalabile con subscription condivise, rule engine e bridge verso Kafka. Sostituzione immediata.

RabbitMQ Web-MQTT

Plugin MQTT su WebSocket sulla porta 15675 — l'abbinamento standard per dashboard browser + Delphi.

VerneMQ

Broker MQTT in cluster costruito su Erlang/OTP — sia la modalità MQTT 3.1.1 sia la 5.0 superano la test suite.

ActiveMQ e Artemis

Il listener MQTT integrato di Apache ActiveMQ e il broker Artemis — coesistenza multiprotocollo con AMQP, STOMP e JMS.

Trascini il componente, imposti poche proprietà e via

Abbini un TsgcWebSocketClient a un TsgcWSPClient_MQTT, colleghi OnMQTTConnect / OnMQTTPublish, quindi richiami Subscribe e 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;

// Pubblica un messaggio retained con QoS 1
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);

Specifiche e riferimenti

Fonti autorevoli per i protocolli implementati da questo componente.

Documentazione e Demo

Collegamenti diretti al riferimento del componente, al progetto demo pronto all'uso e al download della versione di prova.

Guida online — Protocol_MQTT Riferimento completo di proprietà, metodi ed eventi di questo componente.
Progetto demo — Demos\Protocols\MQTT Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarichi la versione di prova qui sotto.
Documento tecnico (PDF) Caratteristiche, guida rapida, esempi di codice per Delphi, C++ Builder e .NET e riferimenti alle fonti primarie — relativo a questo solo componente.
Manuale utente (PDF) Manuale completo che copre ogni componente della libreria.

Pronto a iniziare con MQTT?

Scarichi la versione di prova gratuita e cominci a costruire soluzioni di messaging IoT in pochi minuti.