php实现mqtt
PHP 实现 MQTT 通信
MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,常用于物联网(IoT)场景。PHP 可以通过第三方库实现 MQTT 通信。
使用 php-mqtt/client 库
php-mqtt/client 是一个流行的 PHP MQTT 客户端库,支持 MQTT 3.1 和 3.1.1 协议。

安装库:

composer require php-mqtt/client
发布消息示例
<?php
require __DIR__ . '/vendor/autoload.php';
use \PhpMqtt\Client\MqttClient;
use \PhpMqtt\Client\ConnectionSettings;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-publisher';
$username = 'username';
$password = 'password';
$topic = 'test/topic';
$message = 'Hello MQTT!';
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password);
$mqtt->connect($connectionSettings, true);
$mqtt->publish($topic, $message, 0);
$mqtt->disconnect();
?>
订阅消息示例
<?php
require __DIR__ . '/vendor/autoload.php';
use \PhpMqtt\Client\MqttClient;
use \PhpMqtt\Client\ConnectionSettings;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-subscriber';
$username = 'username';
$password = 'password';
$topic = 'test/topic';
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password);
$mqtt->connect($connectionSettings, true);
$mqtt->subscribe($topic, function ($topic, $message) {
echo "Received message on topic [$topic]: $message\n";
}, 0);
$mqtt->loop(true);
$mqtt->disconnect();
?>
使用 bluerhinos/phpmqtt 库
另一个可选库是 bluerhinos/phpmqtt,适用于较旧的 PHP 版本。
安装库:
composer require bluerhinos/phpmqtt
发布消息示例
<?php
require __DIR__ . '/vendor/autoload.php';
use Bluerhinos\phpMQTT;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-publisher';
$username = 'username';
$password = 'password';
$topic = 'test/topic';
$message = 'Hello MQTT!';
$mqtt = new phpMQTT($server, $port, $clientId);
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish($topic, $message, 0);
$mqtt->close();
}
?>
订阅消息示例
<?php
require __DIR__ . '/vendor/autoload.php';
use Bluerhinos\phpMQTT;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-subscriber';
$username = 'username';
$password = 'password';
$topic = 'test/topic';
$mqtt = new phpMQTT($server, $port, $clientId);
if ($mqtt->connect(true, NULL, $username, $password)) {
$topics[$topic] = ['qos' => 0, 'function' => function ($topic, $msg) {
echo "Received message on topic [$topic]: $msg\n";
}];
$mqtt->subscribe($topics, 0);
while ($mqtt->proc()) {}
$mqtt->close();
}
?>
注意事项
- 确保 PHP 环境支持
socket扩展。 - MQTT 服务器地址、端口、认证信息需根据实际环境配置。
- 生产环境中建议使用 TLS/SSL 加密连接。
- 对于长时间运行的订阅脚本,建议使用
supervisor等工具管理进程。






