Protocolo MQTT

Cliente MQTT 3.1.1 y MQTT 5.0 nativo para Delphi, C++Builder y .NET. Mensajería de publicación/suscripción sobre WebSocket o TCP puro con QoS 0/1/2, mensajes retenidos, last will, alias de topic y suscripciones compartidas.

Cliente del subprotocolo MQTT

Una implementación MQTT de primer nivel que se ejecuta allí donde se ejecute el runtime de Delphi / .NET — desde servicios de escritorio hasta dispositivos móviles, dialogando con cualquier broker MQTT conforme al estándar.

Clase del componente

TsgcWSPClient_MQTT

Estándares

MQTT 3.1.1 & MQTT 5.0

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Standard / Professional / Enterprise

Cobertura completa de MQTT 3.1.1 y 5.0

Todas las prestaciones de MQTT a nivel de cable — no solo publicar y suscribirse.

QoS 0, 1 y 2

Entrega fire-and-forget, al menos una vez y exactamente una vez. El handshake de cuatro pasos de QoS 2 (PUBLISH → PUBREC → PUBREL → PUBCOMP) se expone íntegramente mediante eventos para la lógica de reintento o auditoría.

WebSocket o TCP puro

Asigne la propiedad Client a un TsgcWebSocketClient para ejecutar MQTT sobre WebSockets, o utilice el transporte TCP nativo de MQTT en el puerto 1883 / 8883 — el mismo componente, la misma API.

Mensajes retenidos

Marque las publicaciones como retenidas para que el broker entregue el último valor conocido a cualquier suscriptor futuro. Active o desactive la retención en cada llamada a Publish.

Last Will & Testament

LastWillTestament registra un topic + payload que el broker publicará si el cliente se desconecta de forma abrupta — la forma canónica de señalar eventos de dispositivo offline.

Suscripciones con comodines

Filtros de topic con comodines + (un único nivel) y # (múltiples niveles): sensors/+/temperature o devices/#.

Propiedades MQTT 5

Expiración de sesión, receive maximum, tamaño máximo de paquete, máximo de alias de topic, request response info, propiedades de usuario — todo accesible a través de ConnectProperties, PublishProperties y SubscribeProperties.

Alias de topic

MQTT 5 permite que el cliente (y el broker) sustituyan nombres de topic largos por un alias entero de 2 bytes en publicaciones repetidas — un enorme ahorro para flujos de telemetría intensivos.

Suscripciones compartidas

El formato $share/<group>/<topic> de MQTT 5 distribuye los mensajes entrantes en round-robin entre un grupo de suscriptores — el bloque de construcción para pools de workers horizontales.

Petición / respuesta

Las propiedades MQTT 5 ResponseTopic y CorrelationData convierten pub-sub en RPC asíncrono — integrado en los eventos sin necesidad de framing adicional.

Autenticación mejorada

Paquete AUTH de MQTT 5 con AuthenticationMethod / AuthenticationData para desafíos tipo SCRAM — invoque Auth y gestione OnMQTTAuth.

Keep-alive y WatchDog

HeartBeat envía PINGREQ en un intervalo configurable. El WatchDog reconecta automáticamente con retroceso exponencial y restablece las suscripciones.

TLS vía OpenSSL o SChannel

Ejecute MQTTS en 8883 (TCP puro + TLS) o WSS en 443 con certificados de cliente. TLSOptions.IOHandler selecciona OpenSSL (multiplataforma) o SChannel (TLS del kernel de Windows).

Donde MQTT destaca

Su framing ligero, baja sobrecarga y sesiones con estado convierten a MQTT en la elección por defecto para estos escenarios.

Telemetría IoT

Los sensores transmiten lecturas de temperatura, vibración, GPS y batería sobre sesiones MQTT con keep-alive — incluso en enlaces inestables LTE/Cat-M/NB-IoT.

Vehículos conectados y flotas

Canal de mando bidireccional con QoS 1 para rastreadores de flota, gateways OBD y estaciones de recarga de vehículos eléctricos — reconexión y reanudación sin pérdida de publicaciones.

Industrial / SCADA

Sustituya el polling OPC-UA por publicación/suscripción orientada a eventos. Los alias de topic y las suscripciones compartidas escalan a miles de PLCs y dispositivos de campo.

Hogar y edificio inteligente

Iluminación, climatización (HVAC), cerraduras y sensores de presencia dialogando a través de Mosquitto o Home Assistant — el cliente Delphi se integra con la misma facilidad que cualquier nodo embebido.

Plataformas Cloud IoT

El mismo componente dialoga con AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud y EMQX — con certificados de cliente X.509 o tokens SAS.

Cuadros de mando web / navegador

MQTT sobre WebSocket en RabbitMQ Web-MQTT (puerto 15675) permite que el mismo broker envíe mensajes a clientes Delphi y dashboards JS a través de un único puerto TLS.

Push y presencia móvil

Sesiones MQTT de larga duración en iOS/Android con Last Will le ofrecen presencia y push ligero sin depender de un proveedor específico.

Fan-out entre microservicios

Desacople productores y consumidores a través de un broker central. Las suscripciones compartidas reparten el trabajo en round-robin entre un pool de servicios worker Delphi.

Funciona con todos los brokers MQTT relevantes

Cliente conforme a la especificación — verificado contra los brokers que nuestros clientes despliegan en la práctica.

AWS IoT Core

Certificados de cliente X.509, SigV4 sobre WebSocket y cuotas del broker AWS IoT. Consulte la página dedicada de AWS IoT.

Azure IoT Hub

Tokens device-SAS, topics de twin/method y aprovisionamiento DPS. Consulte la página de Azure IoT Hub.

HiveMQ y HiveMQ Cloud

Superficie completa de propiedades MQTT 5, suscripciones compartidas, autenticación mejorada y HiveMQ Cluster.

Mosquitto

El broker open-source de referencia — tanto MQTT 3.1.1 como 5.0, sobre TCP o WebSocket.

EMQX

Broker enormemente escalable con suscripciones compartidas, motor de reglas y puente hacia Kafka. Drop-in.

RabbitMQ Web-MQTT

Plugin MQTT sobre WebSocket en el puerto 15675 — el emparejamiento estándar para dashboards de navegador + Delphi.

VerneMQ

Broker MQTT en clúster construido sobre Erlang/OTP — tanto el modo MQTT 3.1.1 como 5.0 superan la suite de pruebas.

ActiveMQ y Artemis

El listener MQTT integrado en Apache ActiveMQ y el broker Artemis — coexistencia multiprotocolo con AMQP, STOMP y JMS.

Coloque el componente, configure unas pocas propiedades y listo

Empareje un TsgcWebSocketClient con TsgcWSPClient_MQTT, asocie OnMQTTConnect / OnMQTTPublish, luego Subscribe y 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;

// Publicar un mensaje QoS 1 retenido
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);

Especificaciones y referencias

Fuentes autorizadas de los protocolos que implementa este componente.

Documentación y demos

Acceda directamente a la referencia del componente, obtenga el proyecto de demo listo para ejecutar y descargue la versión de prueba.

Ayuda en línea — Protocol_MQTT Referencia completa de propiedades, métodos y eventos de este componente.
Proyecto de demo — Demos\Protocols\MQTT Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descargue la versión de prueba más abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi, C++ Builder y .NET, y referencias a fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual exhaustivo que cubre todos los componentes de la biblioteca.

¿Listo para empezar con MQTT?

Descargue la versión de prueba gratuita y empiece a construir soluciones de mensajería IoT en minutos.