ホームページ  >  記事  >  バックエンド開発  >  MQTT プロトコル用の PHP クライアント実装ソリューションの比較とパフォーマンス テスト

MQTT プロトコル用の PHP クライアント実装ソリューションの比較とパフォーマンス テスト

PHPz
PHPzオリジナル
2023-07-08 21:00:071820ブラウズ

MQTT プロトコルの PHP クライアント実装の比較とパフォーマンス テスト

はじめに:
モノのインターネットの急速な発展に伴い、MQTT (Message Queuing Telemetry Transport) プロトコルは軽量メッセージとして機能します。送信 このプロトコルは IoT アプリケーションで広く使用されています。 MQTT クライアントを開発する場合、適切な実装ソリューションを選択し、そのパフォーマンスをテストすることが非常に重要です。

この記事では、一般的な MQTT PHP クライアント実装ソリューションを比較し、開発者の参考のためにそのパフォーマンスをテストします。

1. 背景知識
Mosquitto、phpMQTT、eclipse-paho-php など、選択できる PHP MQTT クライアント実装ソリューションは多数あります。これらのオプションについては、以下で簡単に紹介します。

  1. Mosquitto
    Mosquitto はオープンソースの MQTT ブローカー実装であり、MQTT C ライブラリと PHP 拡張機能も提供します。豊富な機能と信頼性の高いパフォーマンスを提供し、複数のオペレーティング システム プラットフォームをサポートします。
  2. phpMQTT
    phpMQTT は、純粋な PHP に基づいて記述された MQTT クライアントです。シンプルで使いやすく、MQTT 通信を PHP アプリケーションに統合する必要があるシナリオに適しています。これはソケット拡張機能に依存しており、MQTT ブローカーに接続してメッセージを送受信するために使用できます。
  3. eclipse-paho-mqtt-php
    eclipse-paho-mqtt-php は、Eclipse Paho チームによって提供される MQTT PHP クライアント ライブラリです。 MQTT 5.0 プロトコルのサポートを提供し、SSL や永続セッションなどの高度な機能を提供します。

2. パフォーマンス テスト
これらのいくつかの実装ソリューションのパフォーマンスを評価するために、同じテスト シナリオを使用し、各ソリューションのパフォーマンス指標を記録します。

テストでは、次の環境と方法を採用しました。

  • ハードウェア環境: よりパフォーマンスの高いサーバーを使用します。
  • テスト シナリオ: 接続、メッセージの送信、メッセージの受信のパフォーマンスをそれぞれテストします。
  • 同時実行: テストのためにさまざまな数の同時接続をシミュレートし、各ソリューションのパフォーマンスを記録します。

以下はテスト結果の概要です:

  1. 接続パフォーマンス テスト

Mosquitto:

<?php
require('mosquitto.php');

$mqtt = new MosquittoClient();
$mqtt->onConnect(function($rc) use ($mqtt) {
    if ($rc == 0) {
        echo "Connection succeeded.
";
        $mqtt->disconnect();
    }
});

$mqtt->connect('localhost', 1883, 60);
$mqtt->loopForever();
?>

phpMQTT :

<?php
require('phpMQTT.php');

$mqtt = new phpMQTT('localhost', 1883, 'phpMQTT');
if ($mqtt->connect()) {
    echo "Connection succeeded.
";
    $mqtt->close();
}
?>

eclipse-paho-mqtt-php:

<?php
require('eclipse-paho-mqtt.php');

use EclipseMQTTClientFactory;
use EclipseMQTTConfig;

$client = ClientFactory::getClient(Config::create('localhost'));
if ($client->connect()) {
    echo "Connection succeeded.
";
    $client->disconnect();
}
?>
  1. メッセージ送信パフォーマンステスト

Mosquitto:

<?php
require('mosquitto.php');

$mqtt = new MosquittoClient();
$mqtt->onPublish(function($message) use ($mqtt) {
    echo "Message published.
";
    $mqtt->disconnect();
});

$mqtt->connect('localhost', 1883, 60);
$mqtt->publish('topic', 'Hello, MQTT!', 0);
$mqtt->loopForever(); 
?>

phpMQTT:

<?php
require('phpMQTT.php');

$mqtt = new phpMQTT('localhost', 1883, 'phpMQTT');
if ($mqtt->connect()) {
    $mqtt->publish('topic', 'Hello, MQTT!', 0);
    echo "Message published.
";
    $mqtt->close();
}
?>

eclipse-paho-mqtt-php:

<?php
require('eclipse-paho-mqtt.php');

use EclipseMQTTClientFactory;
use EclipseMQTTConfig;

$client = ClientFactory::getClient(Config::create('localhost'));
if ($client->connect()) {
    $client->publish('topic', 'Hello, MQTT!', 0);
    echo "Message published.
";
    $client->disconnect();
}
?>
  1. 受信メッセージパフォーマンステスト

Mosquitto:

<?php
require('mosquitto.php');

$mqtt = new MosquittoClient();
$mqtt->onConnect(function($rc) use ($mqtt) {
    if ($rc == 0) {
        $mqtt->subscribe('topic', 0);
    }
});

$mqtt->onMessage(function($message) use ($mqtt) {
    echo "Received message: " . $message->payload . "
";
    $mqtt->disconnect();
});

$mqtt->connect('localhost', 1883, 60);
$mqtt->loopForever();
?>

phpMQTT:

<?php
require('phpMQTT.php');

$mqtt = new phpMQTT('localhost', 1883, 'phpMQTT');
if ($mqtt->connect()) {
    $topics['topic'] = array('qos' => 0, 'function' => 'messageReceived');
    $mqtt->subscribe($topics);
    while($mqtt->proc()){}
    $mqtt->close();
}

function messageReceived($topic, $message) {
    echo "Received message: " . $message . "
";
}
?>

eclipse-paho-mqtt-php:

<?php
require('eclipse-paho-mqtt.php');

use EclipseMQTTClientFactory;
use EclipseMQTTConfig;

$client = ClientFactory::getClient(Config::create('localhost'));
if ($client->connect()) {
    $client->subscribe('topic', 0);
    while ($message = $client->getMessage()) {
        echo "Received message: " . $message->getPayload() . "
";
    }
    $client->disconnect();
}
?>

結果は、Mosquitto がさまざまな同時実行環境で優れたパフォーマンスを示し、接続パフォーマンスとメッセージ送信において phpMQTT、eclipse-paho-mqtt-php が続くことを示しています。パフォーマンスは比較的悪いです。

結論:
一般的な MQTT PHP クライアント実装の比較とパフォーマンス テストを通じて、Mosquitto は、特にメッセージの接続とパブリッシュの点で優れたパフォーマンスを示すことがわかりました。軽量のソリューションとして、phpMQTT は比較的シンプルで使いやすく、一部の軽量のシナリオに適しています。 eclipse-paho-mqtt-php はいくつかの高度な機能を提供しますが、パフォーマンスがやや不足しています。開発者は、独自のニーズに応じて適切な実装ソリューションを選択できます。

スペースの制限により、この記事では、MQTT PHP クライアント実装ソリューションの簡単な紹介とパフォーマンス テストのみを提供します。実際のプロジェクトでは、最適なソリューションを選択するために、特定のニーズと特定のシナリオに基づいて、より詳細なパフォーマンスと機能のテストを実行する必要があります。

参考文献:

  1. Mosquitto 公式 Web サイト: https://mosquitto.org/
  2. phpMQTT ライブラリ: https://github.com/bluerhinos/phpMQTT
  3. eclipse-paho-mqtt-php ライブラリ: https://github.com/eclipse/paho.mqtt.php

以上がMQTT プロトコル用の PHP クライアント実装ソリューションの比較とパフォーマンス テストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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