MQTT プロトコル
Delphi、C++Builder、.NET 向けのネイティブ MQTT 3.1.1 および MQTT 5.0 クライアントです。WebSocket または raw TCP 上のパブリッシュ/サブスクライブメッセージングを、QoS 0/1/2、保持メッセージ、Last Will、トピックエイリアス、共有サブスクリプションとともに提供します。
Delphi、C++Builder、.NET 向けのネイティブ MQTT 3.1.1 および MQTT 5.0 クライアントです。WebSocket または raw TCP 上のパブリッシュ/サブスクライブメッセージングを、QoS 0/1/2、保持メッセージ、Last Will、トピックエイリアス、共有サブスクリプションとともに提供します。
Delphi / .NET ランタイムが動作するあらゆる環境 — デスクトップサービスからモバイルデバイスまで — で実行できる第一級の MQTT 実装であり、標準準拠のあらゆる MQTT ブローカーと通信します。
TsgcWSPClient_MQTT
Windows, macOS, Linux, iOS, Android
Standard / Professional / Enterprise
単なるパブリッシュ/サブスクライブにとどまらず、MQTT のワイヤレベル機能をすべて網羅しています。
Fire-and-forget、at-least-once、exactly-once の配信に対応します。QoS 2 の 4 ウェイハンドシェイク(PUBLISH → PUBREC → PUBREL → PUBCOMP)はイベント経由で完全に公開されており、リトライや監査ロジックを実装できます。
Client プロパティを TsgcWebSocketClient に接続すれば MQTT を WebSocket 上で実行でき、ポート 1883 / 8883 のネイティブ MQTT TCP トランスポートも使用できます — 同じコンポーネント、同じ API です。
publication を retained としてマークすれば、ブローカーは最後に既知の値を将来のすべてのサブスクライバーに配信します。Publish の呼び出しごとに retain を設定/解除できます。
LastWillTestament は、クライアントが正常に切断されなかった場合にブローカーが発行するトピック+ペイロードを登録します — デバイスのオフラインイベントを通知する標準的な方法です。
+(単一レベル)および #(複数レベル)のワイルドカードを用いたトピックフィルター: sensors/+/temperature や devices/# など。
セッション有効期限、receive maximum、最大パケットサイズ、トピックエイリアス最大値、リクエスト応答情報、ユーザープロパティ — すべて ConnectProperties、PublishProperties、SubscribeProperties 経由でアクセスできます。
MQTT 5 ではクライアント(およびブローカー)が、繰り返し発行されるメッセージの長いトピック名を 2 バイト整数のエイリアスに置き換えられます — 高頻度なテレメトリストリームで大きな帯域削減になります。
MQTT 5 の $share/<group>/<topic> は、受信メッセージをサブスクライバーグループ間でラウンドロビン分配します — 水平方向のワーカープールを構築する基盤です。
MQTT 5 の ResponseTopic および CorrelationData プロパティは、追加のフレーミングなしでパブサブを非同期 RPC に変えます — イベントに組み込まれています。
MQTT 5 の AUTH パケットと AuthenticationMethod / AuthenticationData による SCRAM 形式のチャレンジに対応します — Auth を呼び出し、OnMQTTAuth を処理します。
HeartBeat は調整可能な間隔で PINGREQ を送信します。WatchDog は指数バックオフで自動再接続し、サブスクリプションを再開します。
ポート 8883 で MQTTS(raw TCP+TLS)、または 443 で WSS をクライアント証明書付きで実行できます。TLSOptions.IOHandler で OpenSSL(クロスプラットフォーム)または SChannel(Windows カーネル TLS)を選択します。
軽量なフレーミング、低オーバーヘッド、ステートフルセッションにより、MQTT は以下のシナリオで定番の選択肢となります。
センサーはキープアライブされた MQTT セッション上で、温度、振動、GPS、バッテリーの計測値をストリーミングします — LTE/Cat-M/NB-IoT のような不安定な回線でも安定して動作します。
フリートトラッカー、OBD ゲートウェイ、EV 充電ステーション向けの QoS 1 双方向コマンドチャネル — 再接続して publication を失うことなく再開できます。
OPC-UA のポーリングをイベント駆動のパブリッシュ/サブスクライブに置き換えます。トピックエイリアスと共有サブスクリプションにより、数千の PLC やフィールドデバイスまでスケールします。
照明、HVAC、錠、在室センサーが Mosquitto や Home Assistant 経由で通信します — Delphi クライアントは任意の組み込みノードと同じくらい簡単に統合できます。
同一のコンポーネントが AWS IoT Core、Azure IoT Hub、Google Cloud IoT、IBM Watson、HiveMQ Cloud、EMQX と通信します — X.509 クライアント証明書や SAS トークンに対応します。
RabbitMQ Web-MQTT(ポート 15675)上の MQTT-over-WebSocket により、同じブローカーが単一の TLS ポート経由で Delphi クライアントと JS ダッシュボードの両方にプッシュできます。
iOS/Android 上の長寿命 MQTT セッションと Last Will により、ベンダー固有のプロバイダーに依存せずプレゼンスと軽量プッシュを実現できます。
中央ブローカーを介してプロデューサーとコンシューマーを疎結合化します。共有サブスクリプションにより、Delphi ワーカーサービスのプール全体に作業をラウンドロビン分配できます。
仕様準拠のクライアント — お客様が実際にデプロイしているブローカーで検証済みです。
X.509 クライアント証明書、WebSocket 上の SigV4、AWS IoT ブローカークォータに対応します。専用の AWS IoT ページをご覧ください。
デバイス SAS トークン、twin/method トピック、DPS プロビジョニングに対応します。Azure IoT Hub ページをご覧ください。
MQTT 5 プロパティのフルサーフェス、共有サブスクリプション、拡張認証、HiveMQ Cluster に対応します。
リファレンスとなるオープンソースのブローカーです — MQTT 3.1.1 と 5.0 を、TCP または WebSocket 経由でサポートします。
共有サブスクリプション、ルールエンジン、Kafka へのブリッジを備えた大規模スケーラブルなブローカーです。ドロップインで利用できます。
ポート 15675 の MQTT-over-WebSocket プラグイン — ブラウザと Delphi のダッシュボードを組み合わせる標準的な構成です。
Erlang/OTP 上に構築されたクラスター型 MQTT ブローカー — MQTT 3.1.1 と 5.0 のいずれもテストスイートに合格しています。
Apache ActiveMQ の組み込み MQTT リスナーと Artemis ブローカー — AMQP、STOMP、JMS とのマルチプロトコル共存に対応します。
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;
// 保持された QoS 1 メッセージをパブリッシュ
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);
このコンポーネントが実装するプロトコルの一次情報源です。
コンポーネントリファレンスへのディープリンク、すぐに実行できるデモプロジェクト、そして体験版をダウンロードできます。
| オンラインヘルプ — Protocol_MQTT このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\Protocols\MQTT すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています — 下記から体験版をダウンロードしてください。 | 開く | |
| 技術ドキュメント (PDF) 機能、クイックスタート、Delphi、C++ Builder、.NET のコードサンプル、および一次情報源への参照を、このコンポーネントに絞ってまとめています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリ内のすべてのコンポーネントを網羅した包括的なマニュアルです。 | 開く |