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
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-publisher';
$username = 'username';
$password = 'password';
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password);
$mqtt->connect($connectionSettings, true);
$mqtt->publish('topic/test', 'Hello World!', 0);
$mqtt->disconnect();
?>
订阅消息示例:
<?php
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;
$server = 'broker.example.com';
$port = 1883;
$clientId = 'php-subscriber';
$username = 'username';
$password = 'password';
$mqtt = new MqttClient($server, $port, $clientId);
$connectionSettings = (new ConnectionSettings)
->setUsername($username)
->setPassword($password);
$mqtt->connect($connectionSettings, true);
$mqtt->subscribe('topic/test', function ($topic, $message) {
echo "Received message on topic [$topic]: $message\n";
}, 0);
$mqtt->loop(true);
$mqtt->disconnect();
?>
使用 Bluerhinos/phpMQTT 库
另一个常用的 PHP MQTT 实现是 Bluerhinos/phpMQTT。

安装方法:
composer require bluerhinos/phpmqtt
发布消息示例:
<?php
require('phpMQTT.php');
$server = 'broker.example.com';
$port = 1883;
$username = 'username';
$password = 'password';
$client_id = 'php-publisher';
$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);
if ($mqtt->connect(true, NULL, $username, $password)) {
$mqtt->publish('topic/test', 'Hello World!', 0);
$mqtt->close();
}
?>
订阅消息示例:

<?php
require('phpMQTT.php');
$server = 'broker.example.com';
$port = 1883;
$username = 'username';
$password = 'password';
$client_id = 'php-subscriber';
$mqtt = new Bluerhinos\phpMQTT($server, $port, $client_id);
if(!$mqtt->connect(true, NULL, $username, $password)) {
exit(1);
}
$topics['topic/test'] = array('qos' => 0, 'function' => 'procMsg');
$mqtt->subscribe($topics, 0);
while($mqtt->proc()) {}
$mqtt->close();
function procMsg($topic, $msg) {
echo "Msg Received: $msg\n";
}
?>
使用 Mosquitto 扩展
对于需要更高性能的场景,可以考虑安装 Mosquitto PHP 扩展。
安装方法(Linux):
sudo apt-get install libmosquitto-dev
sudo pecl install Mosquitto-alpha
然后在 php.ini 中添加:
extension=mosquitto.so
使用示例:
<?php
$client = new Mosquitto\Client();
$client->setCredentials('username', 'password');
$client->connect('broker.example.com', 1883, 60);
$client->onConnect(function() use ($client) {
$client->publish('topic/test', 'Hello World!', 0, false);
});
$client->loopForever();
?>
注意事项
- 确保 PHP 环境已安装必要的依赖(如 openssl 扩展用于 TLS 连接)
- 对于生产环境,建议使用 MQTT over TLS/SSL(端口 8883)
- 根据业务需求选择合适的 QoS 等级(0, 1 或 2)
- 长时间运行的订阅脚本需要考虑重连机制和异常处理
- 对于高并发场景,建议使用专门的 MQTT 代理而非 PHP 实现
以上方法提供了在 PHP 中实现 MQTT 通信的不同方案,开发者可以根据项目需求和技术栈选择合适的实现方式。






