Cliente MQTT para Delphi — Conecta a cualquier broker MQTT 3.1 / 5.0

Componente cliente MQTT 3.1.1 y MQTT 5.0 nativo para Delphi y C++Builder. Publicar, suscribir, mensajes retained, last will, QoS 0/1/2, TLS, shared subscriptions y toda la superficie de propiedades MQTT 5 — verificado contra HiveMQ, Mosquitto, EMQX, AWS IoT Core y Azure IoT Hub.

Un cliente MQTT de primera clase para Pascal

MQTT es el protocolo de mensajería de facto para IoT, telemetría, push móvil y vehículos conectados. Tráelo a tu código Delphi sin escribir un solo byte de framing.

Un cliente MQTT para Delphi permite a tu aplicación VCL o FMX hablar el protocolo OASIS MQTT — el protocolo ligero de publish/subscribe diseñado para dispositivos restringidos y redes de bajo ancho de banda y alta latencia. Con sgcWebSockets obtienes la superficie completa del cliente en un único componente no visual, TsgcWSPClient_MQTT, que funciona desde Delphi 7 hasta Delphi 13 y en cada plataforma destino de Embarcadero (Win32, Win64, Linux64, macOS, iOS, Android).

El componente implementa las dos versiones principales de MQTT en la misma ruta de código: el ampliamente desplegado MQTT 3.1.1 (estándar OASIS, usado por prácticamente cada broker IoT desde 2014) y el moderno MQTT 5.0 (con alias de topic, expiración de sesión, propiedades de usuario, autenticación mejorada, request/response y shared subscriptions). Una sola propiedad — Version — alterna entre ellas.

Clase de componente

TsgcWSPClient_MQTT

Transportes

TCP nativo (1883 / 8883), WebSocket (80 / 443), TLS vía OpenSSL o SChannel

Versiones

MQTT 3.1.1 y MQTT 5.0

Plataformas

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

Funciona con todos los brokers MQTT contra los que probamos

Un cliente conforme a la especificación es, en principio, agnóstico al broker — pero los brokers reales tienen sus rarezas. Probamos cada release contra los brokers que nuestros clientes realmente despliegan.

HiveMQ y HiveMQ Cloud

Superficie completa de propiedades MQTT 5, shared subscriptions, autenticación mejorada y HiveMQ Cluster. El nivel Cloud gratuito es la forma más fácil de probar el componente de extremo a extremo.

Eclipse Mosquitto

El broker open-source de referencia. Ejecútalo localmente con docker run -p 1883:1883 eclipse-mosquitto y tienes un destino de desarrollo en 30 segundos.

EMQX

Broker Erlang masivamente escalable con motor de reglas, puentes Kafka y shared subscriptions. Listo para producción con millones de conexiones.

AWS IoT Core

Certificados cliente X.509, MQTT negociado por ALPN en 443, WebSocket firmado con SigV4 y las cuotas del broker AWS IoT. Consulta la página dedicada de AWS IoT Core.

Azure IoT Hub

Tokens SAS de dispositivo, topics twin / direct-method, aprovisionamiento DPS. Consulta la página dedicada de Azure IoT Hub.

Google Cloud IoT

Autenticación de dispositivo basada en JWT en el puerto 8883. El componente genera y rota el JWT automáticamente.

RabbitMQ Web-MQTT

El plugin Web-MQTT de RabbitMQ en el puerto 15675 — mismo broker para navegadores y clientes Delphi sobre un único puerto TLS.

VerneMQ, ActiveMQ, Artemis

Todos pasan la suite de tests de integración. Coexistencia multi-protocolo con AMQP / STOMP / JMS gratis.

QoS, retained, will, TLS — toda la superficie

Cada función MQTT a nivel de wire se expone como propiedad, método o evento — nada oculto.

Quality of Service 0/1/2

Fire-and-forget (QoS 0), at-least-once con PUBACK (QoS 1) y exactly-once con el handshake de cuatro vías PUBREC → PUBREL → PUBCOMP (QoS 2). Escoge por cada llamada a Publish().

Mensajes retained

Marca una publicación como retained para que el broker entregue el último valor conocido a cualquier suscriptor futuro — el patrón estándar para topics de “estado actual”.

Last Will & Testament

LastWillTestament registra un topic + payload que el broker publica si el cliente cae sin desconectarse limpiamente — la señal canónica de dispositivo offline.

Sesiones clean / persistentes

Las suscripciones y los mensajes QoS 1/2 no entregados persisten entre reconexiones cuando CleanSession es false — salva la conectividad intermitente sin perder datos.

TLS y mTLS

MQTTS en 8883 con OpenSSL o SChannel. Carga certificados desde disco, el almacén de certificados de Windows, bundles PKCS#12 o tokens hardware.

Transporte WebSocket

Conecta el componente a un TsgcWebSocketClient para ejecutar MQTT sobre WSS en el puerto 443 — atraviesa cualquier balanceador HTTP o proxy corporativo.

Propiedades MQTT 5

Session expiry, receive maximum, maximum packet size, topic alias maximum, propiedades de usuario, response info — en cada CONNECT / PUBLISH / SUBSCRIBE / DISCONNECT.

Shared subscriptions

$share/<group>/<topic> reparte los mensajes entrantes round-robin entre un pool de workers — escalado horizontal gratis.

Reconexión WatchDog

Reconexión automática con back-off exponencial; las suscripciones y publicaciones QoS 1/2 en cola se reproducen al reanudar.

De cero a un bucle publish/subscribe

Arrastra el componente, conecta dos eventos, activa 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;

Autenticación y seguridad de transporte

Los cuatro patrones de autenticación contra broker están soportados de fábrica: usuario/contraseña sencillos (enviados dentro del paquete CONNECT), certificados cliente X.509 (mTLS), JWT (Google Cloud IoT, brokers personalizados) y tokens SAS (Azure IoT Hub). La autenticación mejorada de MQTT 5 expone el paquete AUTH vía OnMQTTAuth para flujos challenge/response estilo SCRAM.

Para el transporte, puedes ejecutar MQTT-sobre-TCP nativo en los puertos estándar 1883 (claro) o 8883 (TLS), o tunelizar MQTT a través de un WebSocket (la propiedad Client acepta cualquier TsgcWebSocketClient) para atravesar firewalls estrictos sólo-HTTP y edges CDN. Ambas opciones usan el mismo componente y los mismos eventos.

Más sobre MQTT en sgcWebSockets

Página del protocolo MQTT

Referencia completa de TsgcWSPClient_MQTT — propiedades, métodos, eventos, todas las funciones del sub-protocolo.

Brokers IoT en la nube

Páginas dedicadas para AWS IoT Core, Azure IoT Hub, Google Cloud IoT.

Selector en tiempo real

Cuándo elegir MQTT frente a WebSocket, SSE, AMQP o HTTP/2 push.

Blog: Request/response sobre MQTT

Usando ResponseTopic + CorrelationData de MQTT 5 para RPC asíncrono.

Blog: AWS IoT con SigV4

Autenticación WebSocket firmada contra AWS IoT Core.

Blog: AWS IoT custom auth

Auth basada en tokens vía el authorizer personalizado de AWS IoT.

Empieza a publicar en 5 minutos

Coge la versión de prueba, apunta a broker.hivemq.com:1883 y ejecuta el proyecto demo incluido.