MQTT Client
TsgcWSPClient_MQTT는 네이티브 MQTT 3.1.1 및 MQTT 5.0 클라이언트입니다. QoS 0, 1, 2, 보존 메시지, Last Will and Testament, 지속 세션으로 발행하고 구독하며, 이유 코드, 사용자 속성, 토픽 별칭, 공유 구독, 확장 인증 같은 MQTT 5의 추가 기능도 사용할 수 있습니다. Delphi와 C++ Builder에서 같은 컴포넌트, 같은 API를 사용합니다.
TsgcWSPClient_MQTT는 네이티브 MQTT 3.1.1 및 MQTT 5.0 클라이언트입니다. QoS 0, 1, 2, 보존 메시지, Last Will and Testament, 지속 세션으로 발행하고 구독하며, 이유 코드, 사용자 속성, 토픽 별칭, 공유 구독, 확장 인증 같은 MQTT 5의 추가 기능도 사용할 수 있습니다. Delphi와 C++ Builder에서 같은 컴포넌트, 같은 API를 사용합니다.
Client에 TsgcTCPClient를 할당하고, MQTTVersion으로 프로토콜 버전을 고르고, OnMQTTConnect와 OnMQTTPublish를 연결한 다음 Subscribe와 Publish를 호출하세요.
TsgcWSPClient_MQTT
OASIS MQTT 3.1.1 및 MQTT 5.0
TCP (1883) 또는 TLS (8883)
Delphi, C++ Builder
전송: 일반 TCP와 TLS. sgcMQ는 일반 TCP와 TLS로 연결합니다. MQTT over WebSocket이 필요하다면 WebSocket 클라이언트를 제공하는 sgcWebSockets 패키지가 필요합니다.
Client 속성에 지정한 TsgcTCPClient가 MQTT를 TCP 소켓 위에 바로 올립니다. 암호화된 브로커에는 TLS를 켜고 포트를 8883으로 지정하세요.
uses
sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Types,
sgcWebSocket_Protocols, sgcWebSocket_Protocol_MQTT_Client,
sgcWebSocket_Protocol_MQTT_Message;
var
TCPClient: TsgcTCPClient;
MQTT: TsgcWSPClient_MQTT;
begin
TCPClient := TsgcTCPClient.Create(nil);
TCPClient.Host := 'broker.example.com';
TCPClient.Port := 1883;
TCPClient.WatchDog.Enabled := True;
MQTT := TsgcWSPClient_MQTT.Create(nil);
MQTT.Client := TCPClient;
MQTT.MQTTVersion := mqtt5;
MQTT.Authentication.Enabled := True;
MQTT.Authentication.UserName := 'sgc';
MQTT.Authentication.Password := 'sgc';
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;
TCPClient.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);
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;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_MQTT_Client.hpp
TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 1883;
TCPClient->WatchDog->Enabled = true;
TsgcWSPClient_MQTT *MQTT = new TsgcWSPClient_MQTT(this);
MQTT->Client = TCPClient;
MQTT->MQTTVersion = mqtt5;
MQTT->Authentication->Enabled = true;
MQTT->Authentication->UserName = "sgc";
MQTT->Authentication->Password = "sgc";
MQTT->OnMQTTConnect = MQTTConnect;
MQTT->OnMQTTPublish = MQTTPublish;
TCPClient->Active = true;
void __fastcall TForm1::MQTTPublish(TsgcWSConnection *Connection,
UnicodeString aTopic, UnicodeString aText,
TsgcWSMQTTPublishProperties PublishProperties)
{
Memo1->Lines->Add(aTopic + " = " + aText);
}
// In the OnMQTTConnect handler:
MQTT->Subscribe("sensors/+/temperature", mtqsAtLeastOnce);
MQTT->Publish("devices/sensor-01/status",
"online", mtqsAtLeastOnce, true);
가장 자주 사용하게 되는 멤버들입니다.
Client는 소켓을 소유한 TsgcTCPClient를 받습니다. 이 컴포넌트의 Host, Port, TLS, TLSOptions, WatchDog이 바이트가 오가는 방식을 결정합니다.
MQTTVersion으로 mqtt311 또는 mqtt5를 선택합니다. MQTT 5의 속성과 이유 코드는 버전 5를 선택했을 때만 와이어에 나타납니다.
Authentication.Enabled, UserName, Password가 CONNECT 패킷을 채웁니다. MQTT 5의 챌린지/응답 방식에는 Auth를 OnMQTTAuth와 함께 사용하세요.
Publish(topic, text, qos, retain)가 메시지를 보내며, 바이너리 페이로드용 TStream 오버로드도 있습니다. PublishAndWait는 브로커가 패킷을 확인할 때까지 블로킹합니다.
Subscribe(topic, qos)는 필터 하나 또는 TsgcWSTopics 목록을 받고, UnSubscribe가 이에 대응합니다. 와일드카드는 한 단계에 +, 그 아래 전체에 #입니다.
OnMQTTPublish가 수신 메시지를 전달합니다. QoS 2 핸드셰이크는 OnMQTTPubRec, OnMQTTPubRel, OnMQTTPubComp로 드러나고, QoS 1에는 OnMQTTPubAck가 있습니다.
LastWillTestament는 정상적인 DISCONNECT 없이 연결이 끊겼을 때 브로커가 대신 발행할 토픽, 메시지, QoS, retain 플래그를 담습니다.
ConnectProperties가 MQTT 5의 세션 만료와 제한값을 설정합니다. HeartBeat는 keep-alive PINGREQ를 보내고, 응답 시 OnMQTTPing이 발생합니다.
QoS 속성은 확인 응답이 오기 전까지 송신 QoS 1과 2 메시지를 어떻게 저장하고 재전송할지 제어합니다.