1. Go to this page and download the library: Download utopia-php/mqtt library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
utopia-php / mqtt example snippets
topia\Mqtt\Adapter;
use Utopia\Mqtt\Connection;
use Utopia\Mqtt\Handler;
use Utopia\Mqtt\Server;
use Utopia\Mqtt\Packet\Auth;
use Utopia\Mqtt\Packet\Connack;
use Utopia\Mqtt\Packet\Connect;
use Utopia\Mqtt\Packet\Disconnect;
use Utopia\Mqtt\Packet\Publish;
use Utopia\Mqtt\Packet\Puback;
use Utopia\Mqtt\Packet\Suback;
use Utopia\Mqtt\Packet\Subscribe;
use Utopia\Mqtt\Packet\Unsubscribe;
use Utopia\Mqtt\Packet\Unsuback;
final class Broker implements Handler
{
public function onConnect(Connect $connect, Connection $connection): Connack|Auth
{
return Connack::accept();
}
public function onSubscribe(Subscribe $subscribe, Connection $connection): Suback
{
$suback = new Suback();
foreach ($subscribe->filters() as $filter) {
$suback->grant($filter->qos);
}
return $suback;
}
public function onPublish(Publish $publish, Connection $connection, iterable $subscribers): void
{
foreach ($subscribers as $subscriber) {
$subscriber->publish($publish->topic, $publish->payload, qos: $publish->qos);
}
}
public function onAuthenticate(Auth $auth, Connection $connection): Connack|Auth|Disconnect
{
return Auth::success($auth->method);
}
public function onUnsubscribe(Unsubscribe $unsubscribe, Connection $connection): Unsuback
{
return new Unsuback();
}
public function onPuback(Puback $puback, Connection $connection): void
{
}
public function onDisconnect(?Disconnect $disconnect, Connection $connection): void
{
}
}
$adapter = new Adapter\Swoole([new Adapter\Swoole\Tcp('0.0.0.0', 1883)]);
$server = new Server($adapter, new Broker());
$server->start();
interface Handler
{
public function onConnect(Connect $connect, Connection $connection): Connack|Auth;
public function onAuthenticate(Auth $auth, Connection $connection): Connack|Auth|Disconnect;
public function onSubscribe(Subscribe $subscribe, Connection $connection): Suback;
public function onUnsubscribe(Unsubscribe $unsubscribe, Connection $connection): Unsuback;
public function onPublish(Publish $publish, Connection $connection, iterable $subscribers): void;
public function onPuback(Puback $puback, Connection $connection): void;
public function onDisconnect(?Disconnect $disconnect, Connection $connection): void;
}
public function onConnect(Connect $connect, Connection $connection): Connack|Auth
{
$identity = $this->authenticate($connect->username, $connect->password);
if ($identity === null) {
return Connack::refuse(Connack::NOT_AUTHORIZED); // encoded as the right CONNACK for v3 or v5
}
$connection->identity = $identity; // opaque application state, stored and never read
$connection->prefix = $identity['tenant']; // the isolation key subscriptions are matched under
return Connack::accept();
}
public function onSubscribe(Subscribe $subscribe, Connection $connection): Suback
{
$suback = new Suback();
foreach ($subscribe->filters() as $filter) {
$suback->grant($this->acl->allows($connection->identity, $filter->topic) ? $filter->qos : Suback::DENIED);
}
return $suback;
}
public function onPublish(Publish $publish, Connection $connection, iterable $subscribers): void
{
if (! $this->acl->canPublish($connection->identity, $publish->topic)) {
return; // dropped
}
foreach ($subscribers as $subscriber) {
$subscriber->publish($publish->topic, $publish->payload, qos: $publish->qos);
}
if ($publish->qos === 1) {
$connection->puback($publish->packetId);
}
}
final readonly class RateLimited implements Handler
{
public function __construct(private Handler $inner) {}
public function onConnect(Connect $connect, Connection $connection): Connack|Auth
{
return $this->isFlooding($connection) ? Connack::refuse(Connack::SERVER_BUSY) : $this->inner->onConnect($connect, $connection);
}
// delegate the rest to $this->inner …
}
$server = new Server($adapter, new RateLimited(new Broker()));
$connection->publish($topic, $payload, qos: 1, dup: false, sequence: 42);
$connection->puback($packetId); // acknowledge an inbound QoS 1 PUBLISH
$connection->disconnect($reason); // send a v5 DISCONNECT and close
use Utopia\Mqtt\Adapter;
$adapter = new Adapter\Swoole([
new Adapter\Swoole\Tcp('0.0.0.0', 1883),
new Adapter\Swoole\Tls('0.0.0.0', 8883, cert: '/etc/ssl/mqtt.crt', key: '/etc/ssl/mqtt.key'),
new Adapter\Swoole\WebSocket('0.0.0.0', 8083),
], workers: 4);
$server->setTelemetry($telemetry);
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.