中文说明
高性能、高安定性のクロスプラットフォーム MQTT クライアント
ソケット API に基づいて開発された、高性能、高安定性のクロスプラットフォーム MQTT クライアントは、組み込みデバイス (FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)、Linux、Windows、Mac で使用でき、非常に簡潔 API インターフェイスは、非常に少ないリソースで QOS2 のサービス品質を実現し、mbedtls 暗号化ライブラリをシームレスに接続します。
非常に高い安定性:ドロップと再接続、パケット損失と再送信のいずれであっても、 MQTT プロトコル標準に厳密に準拠しているだけでなく、大量のデータの受信または送信のテストも非常に安定しており、高周波テストも可能です。も非常に安定しています。
軽量: コード プロジェクト全体は非常にシンプルです。 mbedtls を使用しない場合、使用するリソースはほとんどありません。著者は、esp8266 モジュールを使用してクラウドと通信しました。プロジェクト コード全体で消費する RAM は 15k 未満です。
mbedtls の暗号化された送信をサポートし、ネットワーク送信をより安全にし、暗号化されているかどうかに関係なく、インターフェース層はユーザーが気にする必要がありません。mqttclient はユーザーが提供する API インターフェースに固定されており、非常に互換性があります。アプリケーション層に代わってコードの一部を暗号化の有無にかかわらず送信できます。
複数のクライアントをサポートし、同時に実行される複数のクライアントと互換性があり、1 つのデバイスが複数のサーバーに接続されます。
同期および非同期処理をサポートしているため、アプリケーションは CPU リソースを無駄にするためにブロックしたり待機したりする必要がありません。
インターセプター構成をサポートします。一部のプラットフォームでは、クライアントはデフォルトでシステム テーマを自動的にサブスクライブし、サーバーからのテーマは毎回変更されます。この場合、インターセプターを使用してテーマとデータ情報をインターセプトして分離し、ユーザーに配信する必要があるため、柔軟性が大幅に向上します。
オンラインコード生成ツールを使用すると、非常に簡単な構成でコードを生成できます。アドレス: https://jiejietop.gitee.io/mqtt/index.html
非常にシンプルな API インターフェイスを持っています。一般に、mqttclient 設定にはデフォルト値があり、基本的に設定なしで使用でき、任意に設定することもでき、設定には堅牢性検出機能があるため、設計された API インターフェイスも非常にシンプルです。
再接続時間間隔、ハートビート期間、サブスクリプションの最大数、コマンド タイムアウト、読み取りおよび書き込みバッファ サイズ、インターセプタ処理などの多機能パラメータを設定および調整できます。開発者のニーズを満たすようにパラメータを調整および設定できます。複雑かつ簡単に設定できます。さまざまな開発環境で使用できます。
自動再接続後のトピックの自動再サブスクリプションをサポートし、トピックが失われないようにします。
テーマのワイルドカード ""#"、"+"` をサポートします。
サブスクライブされたトピックはメッセージ処理から完全に分離されているため、プログラミング ロジックが簡単かつ使いやすくなり、ユーザーは複雑な論理関係を扱う必要がなくなります。
キープアライブ処理メカニズムは mqttclient に実装されており、ユーザーは心理的な経験をする必要がなく、アプリケーションの機能に集中するだけで済みます。
非常に優れた設計があり、非常に少ないリソースで記録メカニズムを設計し、メッセージが失われた場合にメッセージを再送信して、qos1 および qos2 サービス品質レベルがサービス品質を保証します。
非常に優れたコード スタイルとアイデアがあります。コード全体は階層化された設計を採用しており、コード実装では結合を軽減し、パフォーマンスを向上させるために非同期処理のアイデアが採用されています。
BSD ソケット システムと互換性がある限り、標準の BSD ソケット上に開発されています。
salof のシームレス接続: 同期・非同期のログ出力フレームワークです。アイドル時に対応するログ情報を出力し、情報をフラッシュに書き込んで保存することもできるため、デバッグに便利です。
有名な paho mqtt ライブラリ パッケージを使用します。
他に依存関係はありません。
このプロジェクトには、コードを生成するためにオンライン構成のみを必要とするコード生成ツールがあり、非常にシンプルで使いやすいです。コード生成ツールのアドレスは: https://jiejietop.gitee.io/mqtt/index.html
ROM は合計10857 バイトで、RAM のオーバーヘッドはほぼダイナミック メモリのみに依存します。 TLS 暗号化伝送を使用しない場合、QOS0 のサービス品質レベルを維持するための通信ダイナミック メモリは約3694バイトしか必要としません。 1024 の読み取りバッファ + 1024 の書き込みバッファ + 1024 の内部スレッド スタック サイズを含め、他の MQTT クライアントと比較して、mqttclient は RAM リソースのオーバーヘッドをほとんど必要としません。
コード | ROデータ | RWデータ | ZIデータ | オブジェクト名 |
---|---|---|---|---|
7118 | 791 | 0 | 0 | mqttclient.o |
546 | 0 | 0 | 0 | mqttconnectclient.o |
212 | 0 | 0 | 0 | mqttdeserializepublish.o |
476 | 0 | 4 | 0 | mqttpacket.o |
236 | 0 | 0 | 0 | mqttserializepublish.o |
310 | 0 | 0 | 0 | mqttsubscribeclient.o |
38 | 0 | 0 | 0 | mqttunsubscribeclient.o |
56 | 0 | 0 | 0 | nettype_tcp.o |
62 | 0 | 0 | 0 | network.o |
24 | 0 | 0 | 0 | platform_memory.o |
40 | 0 | 0 | 0 | platform_mutex.o |
344 | 0 | 0 | 0 | platform_net_socket.o |
94 | 0 | 0 | 0 | platform_thread.o |
70 | 0 | 0 | 0 | platform_timer.o |
246 | 0 | 4 | 0 | ランダム.o |
62 | 0 | 0 | 0 | mqtt_list.o |
- | - | - | - | - |
10066 | 791 | 8 | 0 | 合計 |
非常に明確な階層構造を持っています。
フレームワークの最上位には、クライアントのアプリケーション、リリース、パラメーターの設定、サーバーへの接続、切断、トピックのサブスクライブ、トピックのサブスクライブ解除、メッセージのパブリッシュ、およびその他の機能インターフェースを実装するAPI関数インターフェースがあります。
MQTT メッセージ パケット ライブラリとして有名なpaho mqttライブラリが使用されます。
すべての ACK を管理するために、非同期処理メカニズムが使用されます。メッセージの送信時にサーバーの応答を待つ必要はなく、メッセージを記録するだけです。サーバーの確認応答を受信した後、このレコードをキャンセルします。これは非常に効率的です。 mqtt メッセージ (QoS1/QoS2) を送信し、サーバーから応答を受信しない場合、メッセージは再送信されます。
mqtt イールドスレッドは、タイムアウト処理、ack メッセージ処理、サーバーからのパブリッシュ メッセージの受信など、すべてのコンテンツを統一された方法で処理するために内部で実装されています。このとき、コールバック関数が呼び出され、受信したデータをユーザーに通知します。 *リリース後、完了メッセージ処理後、ハートビート メッセージ (キープ アライブ)、サーバーから切断された場合は、再接続、トピックへの再サブスクライブ、メッセージの再送信、または返信を試行する必要があります。 *待機します。
メッセージの読み取りと書き込み、mqtt メッセージのデコード、メッセージの設定 (dup フラグ)、メッセージの破棄、その他の操作などのメッセージ処理。
network は、データ チャネルを自動的に選択できるネットワーク コンポーネントです。暗号化方式の場合、 TLS 暗号化がデータ送信に使用され、TLS は暗号化バックエンドとして mbedtls を選択できます。 TCP 直接接続方式は、最終的に TCP 経由で送信されます。
platform は、ソケットや AT、スレッド、時間、ミューテックス、メモリ管理** など、さまざまなシステムからのものをカプセル化するプラットフォーム抽象化レイヤーです。これらはシステムを処理し、クロスプラットフォーム パッケージにも必要です。
一番右は一般的な内容、リスト処理、ログライブラリ、エラー処理、ソフトウェア乱数発生器などです。
現在、Linux、TencentOS tiny、FreeRTOS、RT-Thread プラットフォームが実装されており (ソフトウェアパッケージ名は kawaii-mqtt`)、TencentOS tiny AT フレームワークに加えて、安定性も抜群です。
プラットフォーム | コードの場所 |
---|---|
Linux | https://github.com/jiejieTop/mqttclient |
TencentOS タイニー | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
TencentOS tiny AT フレームワーク | https://github.com/jiejieTop/gokit3-board-mqttclient |
RTスレッド | https://github.com/jiejieTop/kawaii-mqtt |
FreeRTOS | https://github.com/jiejieTop/freertos-mqttclient |
リリースバージョン | 説明 |
---|---|
[v1.0.0] | 初期リリース、完全な基本フレームワークと安定性の検証 |
[v1.0.1] | サーバーからアクティブに切断するときの論理処理を修正 |
[v1.0.2] | 新しい機能インターセプターを追加し、いくつかの小さなバグを修正しました |
[v1.0.3] | 地球規模の汚染を避けるために、ログの名前を変更し、関連する関数をリストします |
[v1.0.4] | ネットワーク構造とmbedtlsデータチャネルが再調整されました |
[v1.1.0] | より大きなバージョンの更新、コードの一部のリファクタリング、MQTT 処理ロジックの最適化、全体的な安定性の向上、複数のクライアントのサポート、意志の設定のサポート、API インターフェイスの最適化、および複数のクラウド プラットフォームの追加テスト コードとドキュメントの追加オンラインコード生成ツール、オンライン切断設定ツール |
GitHub の問題の形式で問題やバグ レポートを送信することを歓迎します。
mqttclient は、Apache License v2.0 オープンソース契約に従います。コードの共有を奨励し、元の作成者の著作権を尊重します。ソース コードを自由に使用および変更することも、変更したコードをオープン ソースまたはクローズド ソース ソフトウェアとして公開することもできます。
sudo apt-get install cmake g++
テストプラットフォーム | 位置 |
---|---|
emqx (私がプライベートにデプロイしたサーバー) | ./test/emqx/test.c |
百度天宮 | ./テスト/baidu/test.c |
オネット | ./test/onenet/test.c |
Alibaba Cloud モノのインターネット | ./テスト/アリ/テスト.c |
./build.sh
build.shスクリプトを実行すると、実行可能ファイルemqx 、 baidu 、 onenetおよびその他のプラットフォームが./build/bin/ディレクトリの下に生成されます。実行可能プログラムは直接実行できます。
./build/bin/emqx
./make-libmqttclient.sh
make-libmqttclient.sh
スクリプトを実行すると、ダイナミック ライブラリ ファイルlibmqttclient.so
が./libmqttclient/lib
ディレクトリに生成され、システムの/usr/lib
ディレクトリにインストールされます。関連するヘッダー ファイルは ./libmqttclient/lib ディレクトリにコピーされます./libmqttclient/include
、それをプロジェクトにコピーします。アプリケーションのコンパイル時にダイナミック ライブラリをリンクするだけで済みます。 -lmqttclient -lpthread
、動的ライブラリの構成ファイルは./test/mqtt_config.h
構成に基づいています。
クロスコンパイラーを使用している場合は、使用しているコンパイラーに応じて対応する環境変数をエクスポートする必要があります (ここで使用するクロスコンパイラーは arm-linux-gnueabihf-gcc です)。また、ダイナミック ライブラリ ファイルlibmqttclient .so
も設定する必要があります。 libmqttclient .so
は組み込みシステムの/usr/lib
ディレクトリにコピーされます。
export CROSS_COMPILE=arm-linux-gnueabihf-
libmqttclient.so をアンインストールする必要がある場合は、次のコマンドを実行します。
./make-libmqttclient.sh remove
ドキュメントを参照してください。
MQTT プロトコルの概要
MQTTプロトコルの通信処理
mqttclient コード生成ツール
mqttclient の設定と切断ツール
mqttclient の設計と実装
mqttclient が Baidu Tiangongwu アクセスに接続します
mqttclient が OneNET クラウド プラットフォームに接続する
mqttclient が Alibaba Cloud IoT プラットフォームに接続します