一般的な MQTT クライアント ライブラリの概要 (C、C++、Java、C#、Python を包括的にカバー)

MQTT (Message Queuing Telemetry Transport) は、モノのインターネットおよび分散システムで広く使用されている軽量の通信プロトコルです。そのシンプルさ、信頼性、効率性が評価され、デバイスやアプリケーションを接続するためのプロトコルとして選ばれています。MQTT の重要性は自明のことであり、リアルタイム通信の信頼性の高いソリューションを提供し、デバイス間のデータ交換と制御をより便利にします。

この記事では、MQTT プロトコルの使用をすぐに開始し、安定した信頼性の高い通信システムを構築するのに役立つ、一般的に使用される MQTT クライアント ライブラリをいくつか紹介します。IoT デバイスの開発、分散システムの構築、またはリアルタイム データ送信の実行のいずれにおいても、MQTT クライアント ライブラリを理解して習得することが重要です。

MQTT プロトコルの概要

MQTT (Message Queuing Telemetry Transport) は、IBM によって開発されたインスタント メッセージング プロトコルであり、IoT 通信の主流プロトコルの 1 つです。このプロトコルはすべてのプラットフォームをサポートしており、ほぼすべてのネットワーク接続されたアイテムを外部と接続することができ、センサーやアクチュエーターの通信プロトコルとして使用されます。

MQTT プロトコルの基礎となる層は、TCP/IP プロトコルに基づいています。TCP/IP は、ネットワーク上で通信するために使用される一連のプロトコルであり、TCP (Transmission Control Protocol) や IP (Internet Protocol) などが含まれます。MQTT は、基盤となるトランスポート プロトコルとして TCP を使用し、TCP の信頼性と接続性を利用してメッセージの信頼性の高い送信を保証します。MQTT クライアントは、TCP 経由で MQTT ブローカー サーバーに接続し、TCP 接続を介して MQTT メッセージを送信します。TCP プロトコルは信頼性の高いバイト ストリーム送信を提供し、メッセージの順序と整合性を保証します。したがって、MQTT プロトコルは TCP/IP プロトコル スタック上で動作し、TCP/IP が提供するネットワーク通信機能を使用してメッセージの送信を実現します。

MQTT プロトコルは、限られたコンピューティング能力で、低帯域幅で信頼性の低いネットワークで動作する、多数のリモート センサーと制御デバイスの通信用に設計されたプロトコルであり、次の主な特徴があります。

1. パブリッシュ/サブスクライブ モード: MQTT はパブリッシュ/サブスクライブ モードを採用しています。このモードでは、メッセージの発行者 (Publisher) が特定のトピック (Topic) にメッセージをパブリッシュし、サブスクライバー (Subscriber) が特定のトピックにサブスクライブすることでメッセージを受信します。

2. トピック (Topic): トピックは、MQTT メッセージの分類識別子であり、メッセージの宛先と同様です。パブリッシャーは特定のトピックにメッセージをパブリッシュし、サブスクライバーは特定のトピックをサブスクライブすることで、そのトピックに関連するメッセージを受信します。

3. メッセージ品質レベル (QoS): MQTT は、QoS 0 (最大 1 回)、QoS 1 (少なくとも 1 回)、および QoS 2 (1 回のみ) の 3 つのメッセージ品質レベルを定義します。パブリッシャーとサブスクライバーは、ニーズに応じて適切な QoS レベルを選択できます。

4. 保持メッセージ: パブリッシャは保持メッセージを公開することを選択できます。保持メッセージは MQTT プロキシ サーバーに保存され、サブスクライバがトピックをサブスクライブするときにサブスクライバに送信されます。

5. ウィル メッセージ: パブリッシャーはウィル メッセージを設定でき、パブリッシャーが異常切断した場合、MQTT プロキシ サーバーはサブスクライバーにウィル メッセージを送信します。

6. 接続とセッション: MQTT クライアントは、MQTT ブローカー サーバーとの接続を確立することによって通信します。クライアントは、セッション状態を維持し、再接続時に以前のセッションを復元するために接続を維持することを選択できます。

7. 低帯域幅と低リソース消費: MQTT プロトコルは、低帯域幅と低リソース消費で軽量になるように設計されています。IoT デバイスやセンサー ネットワークなど、帯域幅が狭く不安定なネットワーク環境に適しています。

MQTTプロトコル、ついに誰かが明らかにした

MQTT バージョン 3.1.1 プロトコルの概要

MQTTバージョン3.1.1

MQTT 3.1.1 プロトコル中国語版 | MQTT 中国語 Web サイト

MQTT共通プロキシサーバー

MQTT で一般的に使用されるプロキシ サーバーには多くのオプションがあります。次に、いくつかの一般的な MQTT プロキシ サーバーの紹介を示します。

1. Mosquitto: Mosquitto は軽量の MQTT プロキシ サーバーであり、オープン ソースであり、MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートします。Mosquitto は、あらゆる規模のアプリケーションに合わせてインストールと設定が簡単です。信頼性の高いメッセージング機能とサブスクリプション機能を提供し、セキュリティ認証やアクセス制御などの機能をサポートします。

2. HiveMQ: HiveMQ は、大規模な MQTT 通信用の機能が豊富で拡張性の高い MQTT プロキシ サーバーです。HiveMQ は MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートし、信頼性の高いメッセージング、クラスターのサポート、セキュリティ認証、アクセス制御、リアルタイム監視などの機能を提供します。また、ユーザーが必要に応じて機能をカスタマイズできる拡張プラグイン メカニズムも提供します。

3. EMQ X: EMQ X は、MQTT 3.1、MQTT 3.1.1、および MQTT 5.0 プロトコルをサポートするオープンソースの分散型 MQTT プロキシ サーバーです。EMQ X は高可用性と高性能の特性を備えており、大規模な IoT アプリケーション シナリオに適しています。クラスターサポート、セキュリティ認証、アクセス制御、データ永続化、リアルタイム監視などの機能を提供します。EMQX: 大規模分散 MQTT メッセージ サーバー

4. RabbitMQ: RabbitMQ は、AMQP、MQTT、STOMP などの複数のメッセージング プロトコルをサポートする汎用メッセージ ブローカー サーバーです。RabbitMQ は、高可用性、拡張性、柔軟性を備えた信頼性の高いメッセージング機能とサブスクリプション機能を提供します。複数のオペレーティング システムとプログラミング言語をサポートしており、さまざまなアプリケーション シナリオに適しています。

5. NanoMQ:  NanoMQ (新しいウィンドウが開きます) は、 2021 年初頭に EMQX によってリリースされたエッジ コンピューティング オープン ソース プロジェクトです。これは、IoT エッジ コンピューティング シナリオ向けの 次世代の軽量で高性能なMQTT メッセージ サーバーです。Github ウェアハウスのアドレス:  GitHub - emqx/nanomq: IoT エッジ用の超軽量かつ超高速の MQTT ブローカー

上記は一般的に使用される MQTT プロキシ サーバーの一部であり、各プロキシ サーバーには独自の特性と適用可能なシナリオがあります。適切なプロキシ サーバーの選択は、規模、パフォーマンス要件、セキュリティなどの特定のニーズによって異なります。プロキシ サーバーを選択するときは、その信頼性、コミュニティ サポート、使いやすさと設定のしやすさも考慮する必要があります。

MQTT 共通クライアント ライブラリ

MQTT には多くの共通クライアント ライブラリがあります。次に、C 言語、C++、Java、Python の共通クライアント ライブラリを紹介します。

C言語クライアントライブラリ

1. TCP接続、パケット送信、パケット受信、解析を自分で実現します。モノのインターネット MQTT プロトコル メッセージ分析 (単純な C 音声クライアント実装)_Maverick cat a

2. Paho MQTT C: Eclipse Paho プロジェクトの C 言語実装は、基本的な MQTT 機能を提供し、複数のプラットフォームをサポートします。

3. libmosquitto: C 言語で書かれた軽量の MQTT クライアント ライブラリで、複数のプラットフォームをサポートします。

paho.mqtt.c の概要

paho.mqtt.c は、Eclipse によって書かれたオープンソースの mqtt c ライブラリで、Posix 標準オペレーティング システム (Linux、Android、Mac など) および Windows オペレーティング システムをサポートします。

Paho MQTT C クライアントは、すべての MQTT プロトコル クライアント機能をサポートしており、ANSI 標準 C で書かれています。

実際、このライブラリには、「同期」MQTTClient と「非同期」MQTTAsync という 2 つの API セットが用意されています。同期 API の目的は、よりシンプルで便利です。この目的を達成するために、一部の操作は完了するまでブロックされ、プログラムの枠組みがより単純になります。

対照的に、非同期モードでは 1 つの呼び出し (waitForCompletion) のみがブロックされます。非同期モードはコールバック関数を通じて結果を返します。これは、メインスレッドを制御しないアプリケーションに適しています。

ソースコードのダウンロード: https://github.com/eclipse/paho.mqtt.c (非常に遅い)

国内ソースコードミラー: https://gitee.com/mirrors/paho.mqtt.c (スピードテイクオフ)

公式ドキュメント: https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html

実際、リソースが限られた組み込みプラットフォームで使用する場合は、別のライブラリ paho.mqtt.embedded-c が一般的に使用されます。

それらの違いは次のとおりです。

Paho MQTT C は、Windows、Linux、macOS などの複数のプラットフォームで使用できる API と関数のセットを提供する汎用 C 言語 MQTT クライアント ライブラリです。その設計目標は、さまざまな環境で MQTT 通信を実装するためのクロスプラットフォーム MQTT クライアント ライブラリを提供することです。paho.mqtt.embedded-c は、組み込みシステムおよびリソースに制約のあるデバイス向けに特別に設計された MQTT C 言語実装です。組み込みシステムでの使用に焦点を当てており、リソースが限られたデバイスに適合する一連の軽量 API と機能を提供します。

組み込みシステム用のPaho MQTT Cクライアント ライブラリ: GitHub - eclipse/paho.mqtt.embedded-c: 組み込みシステム用の Paho MQTT C クライアント ライブラリ。Paho は Eclipse IoT プロジェクト (https://iot.eclipse.org/) です。

libmosquitto の紹介

libmosquitto は、C 言語環境で MQTT 通信を行うための軽量の MQTT クライアント ライブラリです。MQTT プロキシ サーバーへの接続、メッセージのパブリッシュとサブスクライブ、その他の操作に使用できる一連の使いやすい API を提供します。以下に、libmosquitto の紹介と使用例をいくつか示します。 1. 公式アドレス:

libmosquitto の正式なアドレスは次のとおりです: Eclipse Mosquitto 

2. libmosquitto をインストールします。ソース コードを通じて libmosquitto をコンパイルしてインストールすることも、パッケージ管理ツールを使用してインストールすることもできます。具体的なインストール方法については公式ドキュメントを参照してください。3. libmosquitto を使用する: 以下は、MQTT ブローカー サーバーに接続し、メッセージをパブリッシュし、メッセージをサブスクライブする方法を示す簡単な libmosquitto の使用例です。

#include <stdio.h>
#include <mosquitto.h>
 void on_connect(struct mosquitto *mosq, void *userdata, int rc) {
    if(rc == 0) {
        printf("Connected to MQTT broker!\n");
        mosquitto_subscribe(mosq, NULL, "test/topic", 0);
    } else {
        printf("Connection failed: %s\n", mosquitto_strerror(rc));
    }
}
 void on_message(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) {
    printf("Received message: %s\n", (char *)message->payload);
}
 int main() {
    struct mosquitto *mosq = NULL;
    mosquitto_lib_init();
     mosq = mosquitto_new(NULL, true, NULL);
    if(mosq) {
        mosquitto_connect_callback_set(mosq, on_connect);
        mosquitto_message_callback_set(mosq, on_message);
        mosquitto_connect(mosq, "localhost", 1883, 60);
         mosquitto_loop_start(mosq);
         mosquitto_publish(mosq, NULL, "test/topic", strlen("Hello, MQTT!"), "Hello, MQTT!", 0, false);
         getchar();  // 按下Enter键退出程序
         mosquitto_disconnect(mosq);
        mosquitto_destroy(mosq);
    }
     mosquitto_lib_cleanup();
    return 0;
}

上記のサンプル コードは、MQTT クライアントを作成し、ローカル MQTT ブローカー サーバー (localhost:1883) に接続し、「test/topic」トピックにメッセージをパブリッシュし、トピックをサブスクライブします。メッセージを受信すると、メッセージが出力されます。Enter キーを押すと、プログラムを終了できます。これは単なる例であり、libmosquitto は、ユーザー名とパスワードの設定、TLS/SSL 暗号化、メッセージの設定など、さらに多くの機能とオプションも提供します。詳しい使い方はlibmosquittoの公式ドキュメントやサンプルコードを参照してください。

予防

MQTT では、ハートビートは、クライアントと MQTT ブローカー サーバー間の接続のアクティブな状態を維持するために使用されるメカニズムです。定期的にハートビート パケットを送信することで、クライアントはサーバーにオンライン ステータスを通知できます。ハートビート パケットが長期間受信されない場合、サーバーはクライアントが切断されたとみなして接続を閉じます。MQTT クライアント ライブラリを使用する場合、通常はハートビート メカニズムがサポートされており、ハートビート間隔を設定することで接続のアクティブ状態を維持できます。ハートビート間隔の設定は、特定の MQTT クライアント ライブラリとアプリケーションのシナリオによって異なります。

以下に、いくつかの一般的な MQTT クライアント ライブラリのハートビート設定の例を示します。

   mosquitto_connect(mosq, "localhost", 1883, 60);
   mosquitto_loop_start(mosq);
   mosquitto_publish(mosq, NULL, "topic", strlen("message"), "message", 0, false);
   mosquitto_loop_stop(mosq, true);

上記の例では、60ハートビート間隔として設定することで、クライアントは接続を維持するために 60 秒ごとにハートビート パケットを送信します。ハートビート間隔の設定は、特定のアプリケーション シナリオと MQTT プロキシ サーバーの要件に従って調整する必要があることに注意してください。長時間操作しないとサーバーによって接続が切断される可能性があるため、接続の安定性を維持するには、ニーズに応じて適切なハートビート間隔を設定する必要があります。 

C++クライアントライブラリ

1. Paho MQTT C++: Eclipse Paho プロジェクトの C++ 言語実装は、オブジェクト指向 API を提供し、複数のプラットフォームをサポートします。

https://github.com/eclipse/paho.mqtt.cpp

ミラー / eclipse / paho.mqtt.cpp · GitCode

2. MQTTClient++: 使いやすい API を提供し、複数のプラットフォームをサポートするオープン ソースの C++ MQTT クライアント ライブラリ。

3.蚊

GitHub - kurdybacha/mqttcpp: libmosquitto に基づく MQTT クライアント C++ ライブラリ

mosqpp::mosquittopp は、Paho MQTT C++ に基づく MQTT C++ クライアント ライブラリであり、C++ 環境での MQTT 通信用のオブジェクト指向 API を提供します。

Windows では vcpkg を使用して簡単にインストールできます。x64- が付いているものが 64 ビット版、付いていないものがデフォルトで 32 ビット版のライブラリです。

./vcpkg.exe install  mosquitto
./vcpkg.exe install acl:x64-windows acl asio:x64-windows asio breakpad:x64-windows breakpad crashrpt:x64-windows crashrpt cxxopts:x64-windows cxxopts fast-cpp-csv-parser:x64-windows fast-cpp-csv-parser g3log:x64-windows g3log gtest:x64-windows gtest iniparser:x64-windows iniparser libconfig:x64-windows libconfig linenoise-ng:x64-windows linenoise-ng mosquitto rapidjson:x64-windows rapidjson inih simpleini:x64-windows simpleini rpclib rpclib:x64-windows opencv3 --no-binarycaching

mosqpp::mosquittopp の簡単な使用例を次に示します。

#include <iostream>
#include <cstring>
#include <mosquittopp.h>
 class MyMqttClient : public mosqpp::mosquittopp {
public:
    MyMqttClient(const char* id) : mosquittopp(id) {}
     void on_connect(int rc) {
        if (rc == 0) {
            std::cout << "Connected to MQTT broker" << std::endl;
            subscribe(NULL, "test/topic");
        } else {
            std::cout << "Failed to connect to MQTT broker" << std::endl;
        }
    }
     void on_message(const struct mosquitto_message* message) {
        std::cout << "Received message: " << static_cast<char*>(message->payload) << std::endl;
    }
};
 int main() {
    MyMqttClient client("client1");
     client.connect("broker.hivemq.com");
    client.loop_start();
     while (true) {
        client.publish(NULL, "test/topic", strlen("Hello, MQTT!"), "Hello, MQTT!");
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
     client.loop_stop();
    client.disconnect();
     return 0;
}

上記の例では、最初に mosquittopp から継承した MyMqttClient クラスが定義されています。このクラスでは、on_connect() メソッドと on_message() メソッドがそれぞれ接続の成功と受信メッセージのコールバックを処理するように書き直されます。

on_connect() メソッドで、接続成功メッセージを出力し、「test/topic」トピックをサブスクライブします。on_message() メソッドで、受信したメッセージの内容を出力します。main() 関数では、MyMqttClient オブジェクトを作成し、connect() メソッドを通じて MQTT プロキシ サーバーに接続します。次に、loop_start() メソッドを通じて MQTT ループを開始し、クライアントがメッセージを受信して​​処理できるようにします。ループでは、「test/topic」トピックにメッセージを毎秒パブリッシュします。最後に、MQTT ループを停止し、loop_stop() メソッドとdisconnect() メソッドを使用して切断します。

単純なラッパーを使用する

#include "mosquittopp.h"

#include <functional>
#include <memory>
#include <string>
#include <utility>
#include <vector>
namespace mqtt_client
{
class MQTTClient final : public mosqpp::mosquittopp
{
public:
  MQTTClient(const std::string& id, std::string host, int port, std::string title);
  ~MQTTClient() override;

public:
  using onMessage = std::function<void(const std::string& title, const std::string& msg)>;
  void setReceiveCallback(const onMessage& f) { onMessage_ = f; }

  bool connectToServer();
  void connectToServer(std::error_code& errorCode);
  const std::string& title() const { return title_; }

private:
  void on_connect(int rc) override;
  void on_disconnect(int rc) override;
  void on_error() override;
  void on_subscribe(int mid, int qos_count, const int* granted_qos) override;
  void on_message(const struct mosquitto_message* message) override;
  void on_unsubscribe(int rc) override;

private:
  std::string title_;
  std::string host_;
  int port_;
  onMessage onMessage_;
};

class MQTTClientPtr
{
public:
  std::vector<std::shared_ptr<MQTTClient>> ptr_;
};

}  // namespace mqtt_client
namespace mqtt_client
{
MQTTClient::MQTTClient(const std::string& id, std::string host, int port, std::string title)
    : /*mosqpp::mosquittopp(id.c_str()),*/ title_(std::move(title)),
      host_(std::move(host)),
      port_(port),
      onMessage_(nullptr)
{
}

MQTTClient::~MQTTClient()
{
  disconnect();
  loop_stop();
}
void MQTTClient::on_connect(int rc)
{
  if (rc == 0)
  {
    subscribe(NULL, title_.c_str());
  }
  else
  {
    LOGGING_ERROR("Connect - Code - %d", rc);
  }
}
void MQTTClient::on_disconnect(int rc)
{
  if (rc != 0)
  {
    LOGGING_ERROR("Disconnect - Code - %d", rc);
  }
}
void MQTTClient::on_error()
{
}
void MQTTClient::on_subscribe(int mid, int qos_count, const int* granted_qos)
{
  LOGGING_WARN("Subscription succeeded.");
}
void MQTTClient::on_message(const struct mosquitto_message* message)
{
#define MAX_PAYLOAD_SIZE (1024U)
  char buf[MAX_PAYLOAD_SIZE] = {0};

  if (!strcmp(message->topic, title_.c_str()))
  {
    /* Copy N-1 bytes to ensure always 0 terminated. */
    memcpy(buf, message->payload, message->payloadlen);

    auto message_str = std::string(buf, message->payloadlen);

    if (onMessage_)
    {
      onMessage_(title_, message_str);
    }
  }
}
void MQTTClient::on_unsubscribe(int rc)
{
}
bool MQTTClient::connectToServer()
{
  username_pw_set("loadpoint", "[email protected]");
  auto result = connect(host_.c_str(), port_, 60);
  if (result == MOSQ_ERR_SUCCESS)
    return true;
  return false;
}
void MQTTClient::connectToServer(std::error_code& errorCode)
{
  username_pw_set("loadpoint", "[email protected]");
  auto result = connect(host_.c_str(), port_, 60);
  errorCode = MakeErrorCode(result);
}

}  // namespace mqtt_client

4. QT の qmqtt、Qt は github でソース コードを公式に提供しています。アドレス: https://github.com/qt/qtmqtt

さらに、emqx によって保守されている qt クライアント ライブラリ qmqtt もあり、これも優れています。アドレス: https://github.com/emqx/qmqtt

.net言語クライアントライブラリ

MQTTnet は、.NET プラットフォーム上で MQTT 通信を実装するためのオープンソース MQTT ライブラリです。MQTT プロトコルの接続、公開、サブスクリプションなどの機能をサポートする、使いやすい API のセットを提供します。また、MQTT クライアントと MQTT サーバー (ブローカー) も提供します。

mqttnet アドレス:

https://github.com/dotnet/MQTTnet

MQTTnet のいくつかの特徴と機能を次に示します。

  1.  複数の MQTT プロトコル バージョンのサポート: MQTTnet は MQTT 3.1.1 および MQTT 5.0 バージョンをサポートしており、ニーズに応じて通信に適切なプロトコル バージョンを選択できます。
  2.  非同期サポート: MQTTnet は非同期操作を使用して、同時実行性の高いシナリオでのパフォーマンスと応答性を向上させます。
  3.  完全にカスタマイズ可能: MQTTnet は、特定のニーズに応じてカスタマイズできる豊富な構成オプションを提供します。接続パラメータ、メッセージ処理方法、キープアライブ時間などを設定できます。
  4.  TLS/SSL 暗号化のサポート: MQTTnet は、データのセキュリティを確保するために TLS/SSL による通信暗号化をサポートしています。
  5.  QoS (サービス品質) のサポート: MQTTnet は、メッセージの 3 つの異なるサービス品質クラス、QoS 0 (最大 1 回)、QoS 1 (少なくとも 1 回)、および QoS 2 (1 回のみ) をサポートします。
  6.  ウィル メッセージのサポート: MQTTnet はウィル メッセージの設定をサポートしています。クライアントが異常に切断した場合、サーバーは他のサブスクライバにウィル メッセージを送信できます。
  7.  予約メッセージのサポート: MQTTnet は、サーバーによって保持され、新しいサブスクライバーに送信される予約メッセージの送受信をサポートします。
  8.  セッション永続性のサポート: MQTTnet はセッション永続化機能をサポートしており、クライアントが再接続したときに以前のセッション状態を復元できます。
  9.  クロスプラットフォームのサポート: MQTTnet は、.NET Framework、.NET Core、Xamarin などの複数の .NET プラットフォームで使用できます。

MQTTnet は、開発者が .NET プラットフォーム上で MQTT 通信を実装できるようにするサーバー (ブローカー) とクライアントを提供する、強力で使いやすい MQTT ライブラリです。さまざまな MQTT シナリオやニーズに適した、豊富な機能と柔軟な構成オプションを提供します。

using System;
using System.Text;
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Options;
using MQTTnet.Extensions.ManagedClient;
 class Program
{
    static async Task Main(string[] args)
    {
        var factory = new MqttFactory();
        var mqttClient = factory.CreateMqttClient();
         var options = new MqttClientOptionsBuilder()
            .WithTcpServer("broker.hivemq.com", 1883)
            .Build();
         mqttClient.UseConnectedHandler(async e =>
        {
            Console.WriteLine("Connected to MQTT broker");
             await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("test/topic").Build());
        });
         mqttClient.UseDisconnectedHandler(async e =>
        {
            Console.WriteLine("Disconnected from MQTT broker");
            await Task.Delay(TimeSpan.FromSeconds(5));
            await mqttClient.ConnectAsync(options);
        });
         mqttClient.UseApplicationMessageReceivedHandler(e =>
        {
            Console.WriteLine($"Received message: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
        });
         await mqttClient.ConnectAsync(options);
         while (true)
        {
            var message = new MqttApplicationMessageBuilder()
                .WithTopic("test/topic")
                .WithPayload("Hello, MQTT!")
                .WithExactlyOnceQoS()
                .WithRetainFlag()
                .Build();
             await mqttClient.PublishAsync(message);
            await Task.Delay(TimeSpan.FromSeconds(1));
        }
    }
}

Java言語クライアントライブラリ

Java では、一般的に使用される MQTT クライアント ライブラリは Eclipse Paho Java です。Eclipse Paho Java を使用した簡単なサンプル コードを次に示します。

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 public class MqttClientExample {
    public static void main(String[] args) {
        String broker = "tcp://broker.hivemq.com:1883";
        String clientId = "JavaMqttClient";
        MemoryPersistence persistence = new MemoryPersistence();
         try {
            MqttClient mqttClient = new MqttClient(broker, clientId, persistence);
            MqttConnectOptions connectOptions = new MqttConnectOptions();
            connectOptions.setCleanSession(true);
             mqttClient.setCallback(new MqttCallback() {
                public void connectionLost(Throwable cause) {
                    System.out.println("Connection lost!");
                }
                 public void messageArrived(String topic, MqttMessage message) throws Exception {
                    System.out.println("Received message: " + new String(message.getPayload()));
                }
                 public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("Message delivered!");
                }
            });
             mqttClient.connect(connectOptions);
            mqttClient.subscribe("test/topic");
            mqttClient.publish("test/topic", new MqttMessage("Hello, MQTT!".getBytes()));
             // Keep the program running
            while (true) {
                Thread.sleep(1000);
            }
        } catch (MqttException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Python言語クライアントライブラリ

Python では、一般的に使用される MQTT クライアント ライブラリは Paho MQTT Python です。

以下は、Paho MQTT Python のインストールと使用の例です。 
 
1. Paho MQTT Python ライブラリをインストールします。 
   pip コマンドを使用して、Paho MQTT Python ライブラリをインストールします。

pip install paho-mqtt

2. Paho MQTT Python ライブラリを使用して MQTT メッセージを送受信するためのサンプル コード:

import paho.mqtt.client as mqtt
    # MQTT连接成功回调函数
   def on_connect(client, userdata, flags, rc):
       print("Connected with result code "+str(rc))
       # 订阅主题
       client.subscribe("test/topic")
    # MQTT接收消息回调函数
   def on_message(client, userdata, msg):
       print("Received message: "+str(msg.payload.decode()))
    # 创建MQTT客户端
   client = mqtt.Client()
    # 设置连接成功和接收消息的回调函数
   client.on_connect = on_connect
   client.on_message = on_message
    # 连接MQTT代理服务器
   client.connect("broker.hivemq.com", 1883, 60)
    # 循环处理网络流量,保持MQTT连接
   client.loop_start()
    # 发布消息
   client.publish("test/topic", "Hello, MQTT!")
    # 持续运行,直到手动停止
   while True:
       pass


上記のサンプル コードは、MQTT クライアントを作成し、HiveMQ パブリック MQTT ブローカー サーバーに接続し、トピック「test/topic」をサブスクライブします。メッセージを受信すると、メッセージが出力されます。次に、「test/topic」トピックにメッセージをパブリッシュします。最後に、MQTT 接続はループを通じて維持されます。 

なお、例で使用しているMQTTプロキシサーバーはHiveMQの公開サーバーですが、実際に使用する場合は必要に応じて独自のMQTTプロキシサーバーとして設定する必要があります。 
 
サンプルコードを実行すると、MQTT メッセージを送受信できるようになります。

Android プラットフォーム

Android 開発では、一般的に使用される MQTT クライアント ライブラリは次のとおりです。

1. Eclipse Paho Android サービス: これは、サービスベースの MQTT クライアント ライブラリを提供する Eclipse Paho プロジェクトの Android バージョンです。使いやすい API を提供し、MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートします。MQTT 接続をサービスに配置すると、アプリケーションがバックグラウンドにある場合やデバイスがスリープ状態である場合でも、バックグラウンドで MQTT 接続を実行し続けることができます。

2. Eclipse Paho Android MQTT クライアント: これは Eclipse Paho プロジェクトの Android バージョンでもあり、Android ライブラリに基づいた MQTT クライアント ライブラリを提供します。Paho Java ライブラリと同様の API を提供し、MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートします。Android アプリでは動作しますが、バックグラウンドで実行され続けるわけではありません。

3. MQTT-Client-Framework: これは、基本的な MQTT 機能を提供するオープン ソースの Android MQTT クライアント ライブラリです。MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートし、使いやすい API を提供します。Android アプリでは動作しますが、バックグラウンドで実行され続けるわけではありません。

4. HiveMQ MQTT クライアント: これは、HiveMQ によって提供される Android MQTT クライアント ライブラリであり、MQTT 3.1 および MQTT 3.1.1 プロトコルをサポートします。Android アプリケーションで使用できる使いやすい API を提供します。

これらの MQTT クライアント ライブラリはすべてオープン ソースであり、特定のニーズに応じて Android アプリケーション開発に適したライブラリを選択できます。Android プラットフォームでの MQTT 通信の実現に役立つ豊富な機能と使いやすい API を提供します。

行く

JavaScript

クライアントツール

クライアントツールはたくさんありますが、mqttx が推奨されます。

MQTTX ダウンロード (https://mqttx.app/zh/downloads)

https://github.com/emqx/MQTTX/releases/latest

追加のテストリソース

オンラインサーバー

  • アドレス: mqtt.p2hp.com
  • ポート: 1883 (TCP)、8083 (WebSocket)
  • タイプ: EMQ
  • MQTT V3.1.1/V5.0互換
  • 自由に使用できます

オンライン WebSocket クライアント

その他のリソース

MQTT プロトコルをすばやく理解する - 知識

ホーム| MQTT 中国語ネットワーク

MQTT プロトコル、ついに誰かがそれを明確にした - 知識

paho.mqtt.c_Huo Honpeng のブログの簡単な紹介 - CSDN ブログ

Paho mqtt C言語ライブラリ入門_Mr_LiuSXのブログ-CSDNブログ

https://www.cnblogs.com/homejim/p/8196763.html

Pahomqtt_c++ デモ qt 環境のコンパイル_qt を使用して paho.mqtt.c のソース コードをコンパイルする方法_Lao Wang-embedded linux ブログ-CSDN ブログ

高性能・高安定なクロスプラットフォームMQTTクライアント——mqttclientの紹介と使い方

NanoMQ の概要 | NanoMQ ドキュメント

Qt 開発 MQTT (1) Qt 公式 Qt MQTT_luoyayun361 のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/qq8864/article/details/132364946