ホームページ  >  記事  >  バックエンド開発  >  PHP プロジェクトで MQTT を使用する方法をすぐに理解するための 1 つの記事

PHP プロジェクトで MQTT を使用する方法をすぐに理解するための 1 つの記事

青灯夜游
青灯夜游転載
2021-09-03 19:16:316402ブラウズ

PHP プロジェクトで MQTT を使用する方法をすぐに理解するための 1 つの記事

#PHP は、広く使用されているオープンソースの多目的スクリプト言語で、HTML に埋め込むことができ、特に Web 開発に適しています。

この記事では主に、PHP プロジェクトで php-mqtt/client クライアント ライブラリを使用して MQTT クライアントMQTT サーバーを実装する方法を紹介します。 接続、購読、購読解除、メッセージの送受信、その他の機能。

MQTT クライアント ライブラリの選択

この記事では、composer でダウンロード量が最も多いクライアント ライブラリ php-mqtt/client を選択します。詳細については、PHP をご覧ください。 -MQTT クライアント ライブラリは、Packagist - Search MQTT で表示できます。

php-mqtt/client の使用方法の詳細については、Packagist php-mqtt/client を参照してください。

MQTT 通信は、HTTP システムの外部のネットワーク通信シナリオに属します。PHP 機能の制限のため、PHP システムでのネットワーク通信用に特別に設計された Swoole/Workerman およびその他の拡張機能を使用すると、より良いエクスペリエンスを実現できます。詳細には触れませんが、関連する MQTT クライアント ライブラリは次のとおりです。

  • workerman/mqtt:workerman に基づく PHP 用の非同期 MQTT クライアント。
  • simps /mqtt:MQTT プロトコル分析と PHP 用の Coroutine クライアント。

プロジェクトの初期化

PHP バージョンの確認

このプロジェクトでは開発とテストに 7.4.21 を使用しています。読者は次のコマンドを使用して PHP バージョンを確認できます。

php --version

PHP 7.4.21 (cli) (built: Jul 12 2021 11:52:30) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies

Composer を使用して php-mqtt/client クライアントをインストールする

Composer は、PHP プロジェクトの関係に必要なすべての依存関係を管理できる PHP の依存関係管理ツールです。 。

composer require php-mqtt/client

PHP MQTT を使用して MQTT サーバーに接続します

この記事では、 無料公開の を使用します。 EMQ X Server

によって提供される MQTT、このサービスは EMQ X の

MQTT IoT クラウド プラットフォーム に基づいて作成されています。サーバーのアクセス情報は次のとおりです。 ブローカー:

broker-cn.emqx.io
  • TCP ポート: 1883
  • SSL/TLS ポート: 8883
  • コンポーザー自動ロード ファイルと php-mqtt/client

require('vendor/autoload.php');

use \PhpMqtt\Client\MqttClient;
## をインポートします。 # settings MQTT ブローカー接続パラメーター

MQTT ブローカー接続アドレス、ポート、トピックを設定します。同時に、PHP rand 関数を呼び出して、MQTT クライアント ID をランダムに生成します。

$server   = 'broker-cn.emqx.io';
$port     = 1883;
$clientId = rand(5, 15);
$username = 'emqx_user';
$password = null;
$clean_session = false;

MQTT 接続関数を作成します

上記のパラメーターを使用して接続し、ConnectionSettings を通じて接続パラメーターを設定します (例:

$connectionSettings  = new ConnectionSettings();$connectionSettings
  ->setUsername($username)
  ->setPassword(null)
  ->setKeepAliveInterval(60)  // Last Will 设置
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);复制代码
)

メッセージのサブスクライブ

emqx/test トピックにサブスクライブするコードを記述し、受信したメッセージを処理するサブスクリプションのコールバック関数を構成します。ここで、取得したトピックをサブスクライブします。そして、メッセージが出力されます。

// 订阅
$mqtt->subscribe('emqx/test', function ($topic, $message) {
    printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);

Publish message

ペイロードを構築し、publish 関数を呼び出します。

emqx/test

トピックにメッセージをパブリッシュします。パブリッシュが完了したら、クライアントはポーリング状態に入り、受信メッセージを処理してキューを再送信する必要があります: <pre class="brush:php;toolbar:false;">for ($i = 0; $i&lt; 10; $i++) { $payload = array( &amp;#39;protocol&amp;#39; =&gt; &amp;#39;tcp&amp;#39;, &amp;#39;date&amp;#39; =&gt; date(&amp;#39;Y-m-d H:i:s&amp;#39;), &amp;#39;url&amp;#39; =&gt; &amp;#39;https://github.com/emqx/MQTT-Client-Examples&amp;#39; ); $mqtt-&gt;publish( // topic &amp;#39;emqx/test&amp;#39;, // payload json_encode($payload), // qos 0, // retain true ); printf(&quot;msg $i send\n&quot;); sleep(1); } // 客户端轮询以处理传入消息和重发队列 $mqtt-&gt;loop(true);</pre>Full code

サーバー接続、受信コードを使用したメッセージのパブリッシュ。
setUsername($username)
  ->setPassword(null)
  ->setKeepAliveInterval(60)
  // Last Will 设置
  ->setLastWillTopic('emqx/test/last-will')
  ->setLastWillMessage('client disconnect')
  ->setLastWillQualityOfService(1);


$mqtt = new MqttClient($server, $port, $clientId);

$mqtt->connect($connectionSettings, $clean_session);
printf("client connected\n");

$mqtt->subscribe('emqx/test', function ($topic, $message) {
    printf("Received message on topic [%s]: %s\n", $topic, $message);
}, 0);

for ($i = 0; $i< 10; $i++) {
  $payload = array(
    'protocol' => 'tcp',
    'date' => date('Y-m-d H:i:s'),
    'url' => 'https://github.com/emqx/MQTT-Client-Examples'
  );
  $mqtt->publish(
    // topic
    'emqx/test',
    // payload
    json_encode($payload),
    // qos
    0,
    // retain
    true
  );
  printf("msg $i send\n");
  sleep(1);
}

$mqtt->loop(true);

Test

MQTT メッセージ パブリッシング コードを実行すると、クライアントが正常に接続され、メッセージが 1 つずつパブリッシュされ、正常に受信されたことがわかります。
php pubsub_tcp.php

概要PHP プロジェクトで MQTT を使用する方法をすぐに理解するための 1 つの記事

この時点で、php-mqtt/client クライアントの使用が完了しました。

パブリック MQTT サーバー

に接続し、テスト クライアントと MQTT サーバー間の接続、メッセージ パブリッシュ、およびサブスクリプションを実装します。 元のリンク: https://www.emqx.com/zh/blog/how-to-use-mqtt-in-php

著者: EMQ

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP プロジェクトで MQTT を使用する方法をすぐに理解するための 1 つの記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。