MQTT 协议

专为 IoT 和受限设备设计的轻量级发布-订阅消息协议。完整支持 MQTT 3.1.1 和 MQTT 5.0 规范。

MQTT 子协议客户端

适用于 IoT 和受限设备的轻量级发布-订阅消息传递。完整支持 MQTT 3.1.1 和 MQTT 5.0,支持 WebSocket 或原始 TCP。

组件类

TsgcWSPClient_MQTT

协议

MQTT 3.1.1 & MQTT 5.0

支持平台

Windows, macOS, Linux, iOS, Android

版本

Standard / Professional / Enterprise

放置组件,配置属性,即刻运行

将 TsgcWebSocketClient 与 TsgcWSPClient_MQTT 配对,连接 OnMQTTConnect / OnMQTTPublish 事件,然后订阅和发布。

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;

// Publish a retained QoS 1 message
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);

内部功能

10 个已发布属性、9 个方法、13 个事件 — 对应 TsgcWSPClient_MQTT 参考文档。

协议版本

MQTTVersion 选择 CONNECT 包中通告的级别 — MQTT 3.1.1 或 MQTT 5.0。ConnectProperties 携带 MQTT 5 的会话过期、接收最大值、包大小、主题别名和扩展认证字段。

WebSocket 或原始 TCP

Client 属性连接到 TsgcWebSocketClient 以通过 WebSocket 运行 MQTT,或通过 Broker 连接到 TsgcWSMQTTBroker 以在端口 1883/8883 上使用原生 TCP 传输。

QoS 与保留

以 QoS 0、1 或 2 发布消息,并可选保留。QoS 属性控制默认级别、重试间隔和超时。PublishAndWait 阻塞直到代理确认 — 适用于事务性发布。

遗嘱消息

LastWillTestament 注册主题、载荷、QoS 和保留标志,当连接异常断开时代理将代表此客户端发布 — 一种优雅的设备断线信号方式。

订阅与事件

Subscribe / UnSubscribe 接受带有 +# 通配符的主题过滤器。OnMQTTPublish 传递入站消息;OnMQTTPublishEx 提供原始字节/流。完整 QoS 2 握手通过 OnMQTTPubRecOnMQTTPubRelOnMQTTPubComp 暴露。

保活与认证

HeartBeat 定时发送 PINGREQ 并检测静默代理断线。Authentication 在 CONNECT 中发送用户名/密码。MQTT 5 增强认证:调用 Auth 并处理 OnMQTTAuth 实现 SCRAM 式挑战。

规范与参考资料

该组件实现的协议权威来源。

文档与示例

直达组件参考文档、获取即用示例项目并下载试用版。

在线帮助 — Protocol_MQTT 该组件的完整属性、方法和事件参考。
示例项目 — Demos\Protocols\MQTT 即用示例项目,包含在 sgcWebSockets 包中 — 请从下方下载试用版。
技术文档(PDF) 功能介绍、快速入门、Delphi、C++ Builder 和 .NET 代码示例及原始参考资料 — 仅限此组件。
用户手册(PDF) 涵盖库中每个组件的综合手册。

准备好使用 MQTT 了吗?

下载免费试用版,几分钟内即可开始构建 IoT 消息解决方案。