MQTT: начало работы
Установите пакет в приложение на Localzet Server 7. Публичный API клиента работает внутри event loop.
composer config repositories.localzet-mqtt vcs https://github.com/localzet/MQTT
composer require localzet/mqtt:dev-main
Пример использует локальный брокер без TLS. В production передавайте credentials из secret manager и подключайтесь по mqtts:// с проверкой сертификата.
<?php
use localzet\MQTT\Client;
use localzet\Server;
require __DIR__ . '/vendor/autoload.php';
$server = new Server('http://127.0.0.1:8080');
$server->count = 1;
$server->onWorkerStart = static function (): void {
$client = new Client('mqtt://127.0.0.1:1883', [
'client_id' => 'status-listener-' . getmypid(),
'protocol_level' => 4,
'username' => getenv('MQTT_USERNAME') ?: '',
'password' => getenv('MQTT_PASSWORD') ?: '',
'connect_timeout' => 10,
'resubscribe' => true,
]);
$client->onMessage = static function (string $topic, string $message): void {
echo $topic . ': ' . $message . PHP_EOL;
};
$client->onConnect = static function (Client $client): void {
$client->subscribe('demo/status', ['qos' => 1]);
};
$client->connect();
};
Server::runAll();
Используйте уникальный client_id для каждого активного клиента. Выберите protocol_level: 4 для MQTT 3.1.1 или 5 для MQTT 5. Подписывайтесь после успешного подключения; при reconnect клиент может восстановить подписки, но приложение всё равно должно учитывать повторную доставку и делать обработчики идемпотентными.
Проверка протокола выполняется composer run test. Интеграционный сценарий composer run test:broker требует Docker и запускает временный Mosquitto. Он проверяет TCP/TLS handshake и QoS 1, но тестовый TLS сертификат самоподписанный; production trust chain проверяйте отдельно. См. API и эксплуатацию.

