php mqtt 实现
PHP 实现 MQTT 的方法
使用 phpMQTT 库
phpMQTT 是一个轻量级的 PHP MQTT 客户端库,适用于与 MQTT 代理通信。以下是基本实现步骤:
安装 phpMQTT 库:
composer require bluerhinos/phpmqtt
连接 MQTT 代理并发布消息:
require("phpMQTT.php");
$mqtt = new phpMQTT("broker.example.com", 1883, "phpMQTT Publisher");
if ($mqtt->connect()) {
$mqtt->publish("topic/test", "Hello MQTT", 0);
$mqtt->close();
}
订阅主题并接收消息:
$mqtt = new phpMQTT("broker.example.com", 1883, "phpMQTT Subscriber");
if(!$mqtt->connect()){
exit();
}
$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";
}
使用 Mosquitto 扩展
Mosquitto 提供了 PHP 扩展,允许更直接地与 MQTT 代理交互:
安装 Mosquitto 扩展:
pecl install Mosquitto-alpha
发布消息示例:
$client = new Mosquitto\Client();
$client->connect("broker.example.com", 1883, 60);
$client->publish("topic/test", "Hello from Mosquitto", 0, false);
$client->disconnect();
订阅消息示例:
$client = new Mosquitto\Client();
$client->onConnect(function() use ($client) {
$client->subscribe("topic/test", 0);
});
$client->onMessage(function($message) {
echo "Received message: {$message->payload} on topic {$message->topic}\n";
});
$client->connect("broker.example.com", 1883, 60);
while (true) {
$client->loop();
usleep(10000);
}
使用 Eclipse Paho PHP 客户端
Eclipse Paho 提供了 MQTT 客户端实现:
安装 Paho MQTT PHP:
composer require eclipse/paho.mqtt.php
发布消息示例:
use Eclipse\Paho\MQTT\Client;
use Eclipse\Paho\MQTT\Message;
$client = new Client("tcp://broker.example.com:1883", "php-client");
$client->connect();
$message = new Message("topic/test", "Hello Paho", 0, false);
$client->publish($message);
$client->disconnect();
注意事项
- 确保 MQTT 代理服务器可访问且端口开放
- 根据需求选择合适的 QoS 等级(0,1,2)
- 考虑添加 TLS/SSL 加密连接
- 长时间运行的订阅脚本需要考虑重连机制
- 生产环境建议添加错误处理和日志记录
以上方法提供了不同层次的 MQTT 实现方案,可根据项目需求选择合适的库或扩展。phpMQTT 适合简单需求,Mosquitto 扩展性能更好,Paho 提供了更完整的 MQTT 功能实现。







