MQTT Protokolü

Delphi, C++Builder ve .NET için yerel MQTT 3.1.1 ve MQTT 5.0 istemcisi. QoS 0/1/2, saklanan mesajlar, son istek, topic alias'ları ve paylaşımlı aboneliklerle WebSocket veya ham TCP üzerinden publish-subscribe mesajlaşma.

MQTT alt protokol istemcisi

Delphi / .NET çalışma zamanının çalıştığı her yerde çalışan birinci sınıf bir MQTT uygulaması — masaüstü servislerinden mobil cihazlara, standartlara uygun herhangi bir MQTT broker'ıyla iletişim kurar.

Bileşen sınıfı

TsgcWSPClient_MQTT

Standartlar

MQTT 3.1.1 & MQTT 5.0

Platformlar

Windows, macOS, Linux, iOS, Android

Sürüm

Standard / Professional / Enterprise

Tam MQTT 3.1.1 ve 5.0 yüzeyi

MQTT'nin tel seviyesindeki her özelliği — yalnızca publish ve subscribe değil.

QoS 0, 1 ve 2

Gönder-unut, en-az-bir-kez ve tam-bir-kez teslimat. QoS 2 dört yönlü el sıkışması (PUBLISH → PUBREC → PUBREL → PUBCOMP), yeniden deneme / denetim mantığı için olaylar aracılığıyla tamamen sunulur.

WebSocket veya ham TCP

WebSocket üzerinden MQTT çalıştırmak için Client özelliğini bir TsgcWebSocketClient ile bağlayın veya 1883 / 8883 portunda yerel MQTT TCP taşımasını kullanın — aynı bileşen, aynı API.

Saklanan mesajlar

Broker'ın bilinen son değeri gelecekteki herhangi bir aboneye iletmesi için yayınları saklanan olarak işaretleyin. Publish üzerinde çağrı başına retain ayarlayın veya temizleyin.

Last Will & Testament

LastWillTestament, istemci düzgün olmayan şekilde bağlantısını keserse broker'ın yayınlayacağı bir topic + yük kaydeder — cihaz-çevrimdışı olaylarını bildirmenin standart yolu.

Joker karakterli abonelikler

+ (tek seviye) ve # (çok seviye) joker karakterli topic filtreleri: sensors/+/temperature veya devices/#.

MQTT 5 özellikleri

Oturum süresi sonu, alma maksimumu, maksimum paket boyutu, topic alias maksimumu, istek yanıt bilgisi, kullanıcı özellikleri — tümüne ConnectProperties, PublishProperties ve SubscribeProperties aracılığıyla erişilebilir.

Topic alias'ları

MQTT 5, istemcinin (ve broker'ın) tekrarlanan yayınlar için uzun topic adlarını 2 baytlık bir tam sayı alias ile değiştirmesine olanak tanır — yoğun telemetri akışları için büyük tasarruf.

Paylaşımlı abonelikler

MQTT 5 $share/<group>/<topic>, gelen mesajları bir abone grubu arasında dönüşümlü olarak dağıtır — yatay çalışan havuzları için yapı taşı.

İstek / yanıt

MQTT 5 ResponseTopic ve CorrelationData özellikleri pub-sub'ı asenkron RPC'ye dönüştürür — ekstra çerçeveleme olmadan olaylara yerleştirilmiştir.

Gelişmiş kimlik doğrulama

SCRAM tarzı challenge'lar için AuthenticationMethod / AuthenticationData içeren MQTT 5 AUTH paketi — Auth çağırın, OnMQTTAuth olayını işleyin.

Keep-alive ve WatchDog

HeartBeat, ayarlanabilir bir aralıkta PINGREQ gönderir. WatchDog, üstel geri çekilmeyle otomatik olarak yeniden bağlanır ve abonelikleri devam ettirir.

OpenSSL veya SChannel üzerinden TLS

İstemci sertifikalarıyla 8883'te MQTTS (ham TCP+TLS) veya 443'te WSS çalıştırın. TLSOptions.IOHandler, OpenSSL (çok platformlu) veya SChannel (Windows çekirdek TLS) seçer.

MQTT'nin parladığı yerler

Hafif çerçeveleme, düşük ek yük ve durum bilgisi olan oturumlar, MQTT'yi bu senaryolar için varsayılan seçim yapar.

IoT telemetrisi

Sensörler; sıcaklık, titreşim, GPS ve pil okumalarını keep-alive'lı MQTT oturumları üzerinden akıtır — istikrarsız LTE/Cat-M/NB-IoT bağlantılarında bile.

Bağlı araçlar ve filolar

Filo izleyicileri, OBD ağ geçitleri ve EV şarj istasyonları için QoS 1 ile çift yönlü komut kanalı — yayınları kaybetmeden yeniden bağlan ve devam et.

Endüstriyel / SCADA

OPC-UA yoklamasını olay tabanlı publish-subscribe ile değiştirin. Topic alias'ları ve paylaşımlı abonelikler binlerce PLC ve saha cihazına ölçeklenir.

Akıllı ev ve bina

Aydınlatma, HVAC, kilitler ve presence sensörleri Mosquitto veya Home Assistant aracılığıyla iletişim kurar — Delphi istemcisi herhangi bir gömülü düğüm kadar kolay entegre olur.

Bulut IoT platformları

Aynı bileşen AWS IoT Core, Azure IoT Hub, Google Cloud IoT, IBM Watson, HiveMQ Cloud ve EMQX ile iletişim kurar — X.509 istemci sertifikaları veya SAS belirteçleriyle.

Web / tarayıcı panoları

RabbitMQ Web-MQTT (port 15675) üzerinde MQTT-over-WebSocket, aynı broker'ın tek bir TLS portu üzerinden Delphi istemcilerine ve JS panolarına iletmesini sağlar.

Mobil push ve presence

iOS/Android üzerinde Last Will ile uzun ömürlü MQTT oturumları, satıcıya özgü bir sağlayıcı olmadan size presence ve hafif push sağlar.

Mikroservis fan-out

Üreticileri ve tüketicileri merkezi bir broker aracılığıyla ayırın. Paylaşımlı abonelikler, işi bir Delphi çalışan servisi havuzu arasında dönüşümlü olarak dağıtır.

Her büyük MQTT broker'ıyla çalışır

Spesifikasyona uygun istemci — müşterilerimizin gerçekten dağıttığı broker'lara karşı doğrulanmıştır.

AWS IoT Core

X.509 istemci sertifikaları, WebSocket üzerinden SigV4 ve AWS IoT broker kotaları. Özel AWS IoT sayfasına bakın.

Azure IoT Hub

Cihaz-SAS belirteçleri, twin/method topic'leri ve DPS sağlama. Azure IoT Hub sayfasına bakın.

HiveMQ ve HiveMQ Cloud

Tam MQTT 5 özellik yüzeyi, paylaşımlı abonelikler, gelişmiş kimlik doğrulama ve HiveMQ Cluster.

Mosquitto

Referans açık kaynak broker — hem MQTT 3.1.1 hem de 5.0, TCP veya WebSocket üzerinden.

EMQX

Paylaşımlı abonelikler, kural motoru ve Kafka köprüsü olan, devasa ölçeklenebilir broker. Sorunsuz entegrasyon.

RabbitMQ Web-MQTT

15675 portunda MQTT-over-WebSocket eklentisi — tarayıcı + Delphi panoları için standart eşleşme.

VerneMQ

Erlang/OTP üzerine kurulu kümelenmiş MQTT broker'ı — hem MQTT 3.1.1 hem de 5.0 modları test takımını geçer.

ActiveMQ ve Artemis

Apache ActiveMQ'nun yerleşik MQTT dinleyicisi ve Artemis broker'ı — AMQP, STOMP ve JMS ile çoklu protokol bir arada bulunma.

Bileşeni bırakın, birkaç özellik ayarlayın, başlayın

Bir TsgcWebSocketClient ile TsgcWSPClient_MQTT'yi eşleştirin, OnMQTTConnect / OnMQTTPublish olaylarını bağlayın, ardından Subscribe ve Publish kullanın.

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;

// Saklanan bir QoS 1 mesajı yayınla
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);

Spesifikasyonlar ve referanslar

Bu bileşenin uyguladığı protokoller için yetkili kaynaklar.

Belgeler ve Demolar

Bileşen referansına doğrudan bağlanın, çalışmaya hazır demo projesini alın ve denemeyi indirin.

Çevrimiçi Yardım — Protocol_MQTT Bu bileşen için tam özellik, metot ve olay referansı.
Demo Projesi — Demos\Protocols\MQTT Çalışmaya hazır örnek proje. sgcWebSockets paketinin içinde gelir — denemeyi aşağıdan indirin.
Teknik Belge (PDF) Özellikler, hızlı başlangıç, Delphi, C++ Builder ve .NET için kod örnekleri ve birincil kaynak referansları — yalnızca bu bileşen.
Kullanıcı Kılavuzu (PDF) Kütüphanedeki her bileşeni kapsayan kapsamlı kılavuz.

MQTT ile Başlamaya Hazır mısınız?

Ücretsiz denemeyi indirin ve dakikalar içinde IoT mesajlaşma çözümleri oluşturmaya başlayın.