php 实现mqtt
PHP 实现 MQTT 的方法
PHP 可以通过第三方库或扩展实现 MQTT 协议。以下是几种常见的实现方式:
使用 phpMQTT 库
phpMQTT 是一个轻量级的 PHP MQTT 客户端库,适用于简单的发布/订阅场景。
安装方法:
composer require bluerhinos/phpmqtt
发布消息示例:
require("phpMQTT.php");
$mqtt = new phpMQTT("broker.example.com", 1883, "phpMQTT-pub");
if ($mqtt->connect()) {
$mqtt->publish("topic/test", "Hello MQTT", 0);
$mqtt->close();
}
订阅消息示例:

require("phpMQTT.php");
$mqtt = new phpMQTT("broker.example.com", 1883, "phpMQTT-sub");
if ($mqtt->connect()) {
$topics["topic/test"] = array("qos" => 0, "function" => "procmsg");
$mqtt->subscribe($topics, 0);
while ($mqtt->proc()) { }
$mqtt->close();
}
function procmsg($topic, $msg) {
echo "Msg Received: " . date("r") . "\nTopic: {$topic}\n$msg\n";
}
使用 Mosquitto 扩展
Mosquitto 是 PHP 的 MQTT 客户端扩展,需要先安装 PECL 扩展。
安装方法:
pecl install Mosquitto-alpha
发布消息示例:

$client = new Mosquitto\Client();
$client->connect("broker.example.com", 1883, 60);
$client->onConnect(function() use ($client) {
$client->publish("topic/test", "Hello MQTT", 0, false);
});
$client->loopForever();
订阅消息示例:
$client = new Mosquitto\Client();
$client->connect("broker.example.com", 1883, 60);
$client->onConnect(function() use ($client) {
$client->subscribe("topic/test", 0);
});
$client->onMessage(function($message) {
printf("Received message on topic %s: %s\n", $message->topic, $message->payload);
});
$client->loopForever();
使用 Eclipse Paho MQTT 客户端
Eclipse Paho 提供了 PHP 的 MQTT 客户端实现。
安装方法:
composer require eclipse/paho.mqtt.php
发布消息示例:
use Eclipse\Paho\MQTT\Client;
$client = new Client("tcp://broker.example.com:1883", "php-client");
$client->connect();
$client->publish("topic/test", "Hello MQTT", 0, false);
$client->disconnect();
注意事项
- 确保 MQTT 代理服务器地址和端口正确
- 考虑消息质量等级(QoS)的设置
- 处理连接断开和重连逻辑
- 注意消息订阅的回调函数实现
- 对于生产环境,建议添加错误处理和日志记录
以上方法都可以实现基本的 MQTT 功能,选择哪种方式取决于项目需求和环境配置。phpMQTT 适合简单场景,Mosquitto 扩展性能更好,Paho 提供了更完整的 MQTT 功能实现。






