Home  >  Article  >  Backend Development  >  Comparison and performance testing of PHP client implementation solutions of MQTT protocol

Comparison and performance testing of PHP client implementation solutions of MQTT protocol

PHPz
PHPzOriginal
2023-07-08 21:00:071819browse

Comparison and performance testing of PHP client implementations of the MQTT protocol

Introduction:
With the rapid development of the Internet of Things, the MQTT (Message Queuing Telemetry Transport) protocol serves as a lightweight message transmission The protocol is widely used in IoT applications. When developing an MQTT client, it is very important to choose an appropriate implementation solution and test its performance.

This article will compare common MQTT PHP client implementation solutions and test their performance for reference by developers.

1. Background knowledge
There are many PHP MQTT client implementation solutions that can be chosen, such as Mosquitto, phpMQTT, eclipse-paho-php, etc. These options will be briefly introduced below.

  1. Mosquitto
    Mosquitto is an open source MQTT broker implementation, and also provides MQTT C library and PHP extensions. It provides rich functionality and reliable performance, supporting multiple operating system platforms.
  2. phpMQTT
    phpMQTT is an MQTT client written based on pure PHP. It is simple and easy to use, and is suitable for scenarios where MQTT communication needs to be integrated in PHP applications. It relies on the sockets extension and can be used to connect to an MQTT broker and send and receive messages.
  3. eclipse-paho-mqtt-php
    eclipse-paho-mqtt-php is an MQTT PHP client library provided by the Eclipse Paho team. It provides support for the MQTT 5.0 protocol and provides advanced features such as SSL and persistent sessions.

2. Performance Test
In order to evaluate the performance of these several implementation solutions, we use the same test scenario and record the performance indicators of each solution.

In the test, we adopted the following environment and methods:

  • Hardware environment: Use a server with better performance.
  • Test scenario: Test the performance of connection, sending messages and receiving messages respectively.
  • Concurrency: Simulate different numbers of concurrent connections for testing, and record the performance of each solution.

The following is a summary of the test results:

  1. Connection Performance Test

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. Send message performance test

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. Receive message performance test

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();
}
?>

The results show that Mosquitto shows good performance under different concurrency, followed by phpMQTT, eclipse-paho-mqtt-php in connection performance and sending messages Performance is relatively poor.

Conclusion:
Through comparison and performance testing of common MQTT PHP client implementations, we found that Mosquitto shows excellent performance, especially in terms of connecting and publishing messages. As a lightweight solution, phpMQTT is relatively simple and easy to use and suitable for some lightweight scenarios. eclipse-paho-mqtt-php provides some advanced features, but is somewhat lacking in performance. Developers can choose the appropriate implementation solution according to their own needs.

Limited by space limitations, this article only provides a brief introduction and performance test of the MQTT PHP client implementation solution. In actual projects, more detailed performance and functional testing needs to be conducted based on specific needs and specific scenarios to select the most appropriate solution.

References:

  1. Mosquitto official website: https://mosquitto.org/
  2. phpMQTT library: https://github.com/bluerhinos/phpMQTT
  3. eclipse-paho-mqtt-php library: https://github.com/eclipse/paho.mqtt.php

The above is the detailed content of Comparison and performance testing of PHP client implementation solutions of MQTT protocol. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn