ホームページ PHPフレームワーク Swoole SwooleとMQTTプロトコルを組み合わせた実装方法

SwooleとMQTTプロトコルを組み合わせた実装方法

Jun 25, 2023 am 11:00 AM
mqtt 実装 swoole

モノのインターネットの発展に伴い、リアルタイムのデータ送信と通信を必要とするアプリケーションがますます増えています。メッセージ キュー トランスポート プロトコル (MQTT) は、小型デバイスや低帯域幅環境に適した軽量プロトコルであり、IoT デバイスでのデータ送信によく使用されます。高性能、非同期、イベント駆動型のネットワーク通信フレームワークとして、Swoole は TCP/UDP/UnixSocket プロトコルの効率的な実装を提供し、MQTT プロトコルと併用してより効率的なシステム通信を提供できます。

この記事では、Swoole および MQTT プロトコルを使用して通信する方法を紹介し、実現可能なソリューションを提供します。

まず、MQTT プロトコルの基本的な知識を理解する必要があります。これは、デバイス間の双方向通信を可能にするパブリッシュ/サブスクライブ モデルに基づくプロトコルです。 MQTT プロトコルには、パブリッシャーとサブスクライバーという 2 つの主な役割があります。パブリッシャーはトピックにメッセージをパブリッシュし、サブスクライバーは関心のあるトピックをサブスクライブして、パブリッシャーによってパブリッシュされたメッセージをリアルタイムで受信できます。 MQTTプロトコルでは、トピックはパブリッシュ/サブスクライブの識別子として文字列として定義されます。

次に、Swoole フレームワークと組み合わせて MQTT プロトコルのパブリッシュ/サブスクライブ モデルを実装します。

Swoole を使用して MQTT プロトコルを実装する前に、MQTT ライブラリをインストールする必要があります。 Swoole は MQTT 通信に php-mqtt ライブラリを使用でき、composer を使用してそれをインストールできます。

composer require bluerhinos/phpmqtt dev-master
ログイン後にコピー

インストールが成功したら、Swoole を使用して MQTT プロトコルとの通信を開始できます。

まず、Swoole フレームワークに基づいて TCP サーバーを作成する必要があります。この TCP サーバーでは、データ送信に MQTT プロトコルを使用します。 Swoole フレームワークでは、次のコードを使用して TCP サーバーを作成できます。

$server = new SwooleServer('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
ログイン後にコピー

次に、クライアント要求を処理できるように、サーバーの起動時にサービス フックを登録する必要があります。この例では、onConnect、onReceive、および onClose メソッドを使用します。

$server->on('connect', function ($serv, $fd) {
    echo "Client: Connect.
";
});

$server->on('receive', function ($serv, $fd, $from_id, $data) {
    echo "Receive Data: $data
";

    // 处理MQTT消息
});

$server->on('close', function ($serv, $fd) {
    echo "Client: Close.
";
});
ログイン後にコピー

クライアント要求を受信すると、MQTT メッセージを解析します。この記事の焦点は、Swoole を使用して MQTT プロトコルを実装する方法であるため、MQTT メッセージを解析する方法のみに焦点を当てます。 MQTT メッセージは、php-mqtt ライブラリを使用して簡単に解析でき、それをメソッドにカプセル化できます:

function handleMqttMessage($client_id, $topic, $message)
{
    echo "Mqtt Message Received: 
";
    echo "Client ID: $client_id
";
    echo "Topic: $topic
";
    echo "Message: $message
";
}
ログイン後にコピー

残りの作業は、MQTT メッセージの解析されたデータを、受信を希望するクライアントに送信することです。 。 MQTT プロトコルでは、パブリッシュ/サブスクライブ モードを使用して通信し、指定されたトピックにメッセージをパブリッシュできます。クライアントは、関心のあるトピックをサブスクライブし、そのトピックに関して公開されたメッセージを受信できます。 Swoole フレームワークでは、swoole_server->task() を使用して特定のクライアントにメッセージを送信できます。

次のコードは、MQTT メッセージを受信した後、対応するトピックにサブスクライブしているすべてのクライアントにメッセージを送信します。

$server->on('receive', function ($serv, $fd, $from_id, $data) {
    $mqtt = new BluerhinosphpMQTT('localhost', 1883, 'Swoole_Server');
    $mqtt->debug = false;
    if (!$mqtt->connect()) {
        exit(1);
    }
    $topics['topic_name'] = array('qos' => 0, 'function' => 'handleMqttMessage');
    $mqtt->subscribe($topics, 0);
    while ($mqtt->proc()) {
    };
    $mqtt->close();
    echo "Receive Data: $data
";

    $data = json_decode($data, true);
    $message = $data['message'];

    $client_ids = $serv->getClientList();
    foreach ($client_ids as $client_id) {
        $serv->task("$client_id:$message");
    }

});
ログイン後にコピー

クライアント メッセージが受信されるたびに、サブスクライブされたトピックはコールバック メソッド handleMqttMessage() を呼び出し、指定されたクライアントにメッセージを送信します。

最後に、Task イベントでメッセージをクライアントに送信する必要があります。

$server->on('task', function ($serv, $task_id, $from_id, $data) {
    $client_id = strstr($data, ':', true);
    $message = substr(strstr($data, ':'), 1);
    $serv->send($client_id, $message);
});
ログイン後にコピー

上記のコードは、メッセージをクライアントに送信し、送信が成功した後に対応する ACK メッセージを返します。

概要
この記事では、Swoole を使用して MQTT プロトコルを実装する方法を学びました。このようにして、効率的なリアルタイム通信を実現し、非同期のイベント駆動型アプローチを使用してクライアント要求をより適切に処理できます。 Swoole フレームワークは効率的な TCP/UDP/UnixSocket プロトコルの実装を提供し、大企業と小規模プロジェクトの両方に多くの利点をもたらします。将来的には、データ転送と通信に Swoole プロトコルと MQTT プロトコルを使用するアプリケーションがさらに増えることが予想されます。

以上がSwooleとMQTTプロトコルを組み合わせた実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP MQTT クライアント開発ガイド PHP MQTT クライアント開発ガイド Mar 27, 2024 am 09:21 AM

MQTT (MessageQueuingTelemetryTransport) は、IoT デバイス間の通信に一般的に使用される軽量のメッセージ送信プロトコルです。 PHP は、MQTT クライアントの開発に使用できる、一般的に使用されるサーバー側プログラミング言語です。この記事では、PHP を使用して MQTT クライアントを開発する方法を紹介します。以下の内容が含まれます。 MQTT プロトコルの基本概念 PHPMQTT クライアント ライブラリの選択と使用例: PHPMQTT クライアントを使用した公開と使用

Laravelでswooleコルーチンを使用する方法 Laravelでswooleコルーチンを使用する方法 Apr 09, 2024 pm 06:48 PM

Laravel で Swoole コルーチンを使用すると、大量のリクエストを同時に処理でき、次のような利点があります: 同時処理: 複数のリクエストを同時に処理できます。高いパフォーマンス: Linux の epoll イベント メカニズムに基づいて、リクエストを効率的に処理します。低リソース消費: 必要なサーバー リソースが少なくなります。統合が簡単: Laravel フレームワークとのシームレスな統合が可能で、使いやすいです。

スウールとワーカーマンはどちらが良いですか? スウールとワーカーマンはどちらが良いですか? Apr 09, 2024 pm 07:00 PM

Swoole と Workerman はどちらも高性能の PHP サーバー フレームワークです。 Swoole は、非同期処理、優れたパフォーマンス、スケーラビリティで知られており、多数の同時リクエストと高スループットを処理する必要があるプロジェクトに適しています。 Workerman は、使いやすさや同時実行量が少ないプロジェクトに適した直感的な API を備え、非同期モードと同期モードの両方の柔軟性を提供します。

swoole_process ではユーザーがどのように切り替えられるのでしょうか? swoole_process ではユーザーがどのように切り替えられるのでしょうか? Apr 09, 2024 pm 06:21 PM

Swoole プロセスではユーザーを切り替えることができます。具体的な手順は、プロセスの作成、プロセス ユーザーの設定、プロセスの開始です。

swooleフレームワークでサービスを再起動する方法 swooleフレームワークでサービスを再起動する方法 Apr 09, 2024 pm 06:15 PM

Swoole サービスを再起動するには、次の手順に従います。 サービスのステータスを確認し、PID を取得します。サービスを停止するには、「kill -15 PID」を使用します。サービスの開始に使用したのと同じコマンドを使用してサービスを再起動します。

swoole と java ではどちらの方がパフォーマンスが優れていますか? swoole と java ではどちらの方がパフォーマンスが優れていますか? Apr 09, 2024 pm 07:03 PM

パフォーマンスの比較: スループット: Swoole は、コルーチン メカニズムのおかげでスループットが高くなります。レイテンシー: Swoole のコルーチン コンテキスト スイッチングは、オーバーヘッドが低く、レイテンシーが小さくなります。メモリ消費量: Swoole のコルーチンが占有するメモリは少なくなります。使いやすさ: Swoole は、より使いやすい同時プログラミング API を提供します。

Swoole の動作: 同時タスク処理にコルーチンを使用する方法 Swoole の動作: 同時タスク処理にコルーチンを使用する方法 Nov 07, 2023 pm 02:55 PM

Swoole の動作: 同時タスク処理にコルーチンを使用する方法 はじめに 日常の開発では、複数のタスクを同時に処理する必要がある状況によく遭遇します。従来の処理方法は、マルチスレッドまたはマルチプロセスを使用して同時処理を実現することでしたが、この方法にはパフォーマンスとリソース消費の点で特定の問題がありました。スクリプト言語である PHP は通常、タスクを処理するためにマルチスレッドまたはマルチプロセス メソッドを直接使用できません。ただし、Swoole コルーチン ライブラリの助けを借りて、コルーチンを使用して高パフォーマンスの同時タスク処理を実現できます。この記事で紹介するのは

Java開発の実務経験:MQTTを使用したIoT機能の実装 Java開発の実務経験:MQTTを使用したIoT機能の実装 Nov 20, 2023 pm 01:45 PM

IoT テクノロジーの発展に伴い、インターネットに接続し、インターネットを介して通信および対話できるデバイスがますます増えています。 IoT アプリケーションの開発では、メッセージ キュー テレメトリ トランスポート プロトコル (MQTT) が軽量の通信プロトコルとして広く使用されています。この記事では、Java開発の実務経験を活かしてMQTTによるIoT機能を実装する方法を紹介します。 1. MQT とは何ですか? QTT は、パブリッシュ/サブスクライブ モデルに基づくメッセージ送信プロトコルです。シンプルな設計と低いオーバーヘッドを備えており、少量のデータを迅速に送信するアプリケーション シナリオに適しています。

See all articles