MQTT 프로토콜

IoT 및 제약된 디바이스를 위해 설계된 경량 발행-구독 메시징 프로토콜이에요. MQTT 3.1.1 및 MQTT 5.0 명세를 모두 완전 지원해요.

MQTT 서브프로토콜 클라이언트

IoT 및 제약된 디바이스를 위한 경량 발행-구독 메시징이에요. WebSocket 또는 raw TCP 위에서 MQTT 3.1.1 및 MQTT 5.0을 완전 지원해요.

컴포넌트 클래스

TsgcWSPClient_MQTT

프로토콜

MQTT 3.1.1 & MQTT 5.0

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Standard / Professional / Enterprise

컴포넌트를 놓고, 속성 몇 개만 설정하면 끝

TsgcWebSocketClient를 TsgcWSPClient_MQTT와 짝지어 연결하고, OnMQTTConnect / OnMQTTPublish를 연결한 뒤 Subscribe와 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;

// 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개의 published 속성, 9개의 메서드, 13개의 이벤트 — TsgcWSPClient_MQTT 레퍼런스와 일치해요.

프로토콜 버전

MQTTVersion이 CONNECT 패킷에 광고되는 버전을 선택해요 — MQTT 3.1.1 또는 MQTT 5.0이에요. ConnectProperties는 MQTT 5의 session-expiry, receive-maximum, packet-size, topic-alias, extended-auth 필드를 전달해요.

WebSocket 또는 raw TCP

Client 속성을 TsgcWebSocketClient에 연결하면 WebSocket 위에서 MQTT를 실행해요. BrokerTsgcWSMQTTBroker에 연결하면 1883/8883 포트의 네이티브 TCP 전송을 사용해요.

QoS 및 retain

QoS 0, 1, 2로 발행하며 retain은 선택이에요. QoS 속성이 기본 레벨, 재시도 간격, 타임아웃을 제어해요. PublishAndWait은 브로커가 확인할 때까지 차단되므로 트랜잭션 발행에 유용해요.

Last Will & Testament

LastWillTestament는 연결이 비정상적으로 끊어졌을 때 브로커가 이 클라이언트를 대신해 발행할 토픽, 페이로드, QoS, retain 플래그를 등록해요 — 디바이스 연결 해제를 알리는 깔끔한 방법이에요.

구독 및 이벤트

Subscribe / UnSubscribe+# 와일드카드가 포함된 토픽 필터를 받아요. OnMQTTPublish가 수신 메시지를 전달하고, OnMQTTPublishEx는 raw 바이트/스트림을 제공해요. 완전한 QoS 2 핸드셰이크는 OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp로 노출돼요.

Keep-alive 및 인증

HeartBeat는 타이머로 PINGREQ를 보내며 조용한 브로커 단절을 감지해요. Authentication은 CONNECT에 UserName/Password를 전송해요. MQTT 5 향상된 인증: Auth를 호출하고 OnMQTTAuth에서 SCRAM 방식 챌린지를 처리하세요.

명세 및 참고 자료

이 컴포넌트가 구현하는 프로토콜의 공인 출처예요.

문서 및 데모

컴포넌트 레퍼런스로 바로 이동하고, 바로 실행할 수 있는 데모 프로젝트를 받아보고, 체험판을 다운로드하세요.

온라인 도움말 — Protocol_MQTT 이 컴포넌트의 전체 속성, 메서드, 이벤트 레퍼런스예요.
데모 프로젝트 — Demos\Protocols\MQTT 바로 실행할 수 있는 예제 프로젝트예요. sgcWebSockets 패키지에 포함되어 있으니 아래에서 체험판을 다운로드해 보세요.
기술 문서 (PDF) 이 컴포넌트의 기능, 빠른 시작, Delphi, C++ Builder, .NET 코드 샘플, 출처 참고 자료예요.
사용자 설명서 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 설명서예요.

MQTT를 시작할 준비가 되셨나요?

무료 체험판을 다운로드하고 몇 분 만에 IoT 메시징 솔루션을 구축해 보세요.