在 Webman 框架中使用 MQTT 进行消息的发布和订阅,你可以借助 PHP 的 MQTT 客户端库,比如 phpMQTT。以下是一个简单的示例,展示了如何在 Webman 中使用 MQTT 发布和订阅消息。
安装 phpMQTT
首先,你需要通过 Composer 安装 phpMQTT 库:
bash
composer require bluerhinos/phpmqtt
配置 MQTT 客户端
接下来,你需要配置 MQTT 客户端,包括 MQTT 服务器的地址、端口、客户端 ID、用户名和密码(如果有的话)。
示例代码
- 创建一个 MQTT 服务类
在 app/service 目录下创建一个 MqttService.php 文件,用于封装 MQTT 客户端的逻辑。
<?phpnamespace app\service;use Bluerhinos\phpMQTT;class MqttService
{protected $mqtt;protected $server = 'mqtt.example.com'; // MQTT 服务器地址protected $port = 1883; // MQTT 服务器端口protected $clientId = 'webman_client'; // MQTT 客户端 IDprotected $username = ''; // MQTT 用户名(如果有)protected $password = ''; // MQTT 密码(如果有)public function __construct(){$this->mqtt = new phpMQTT($this->server, $this->port, $this->clientId);if ($this->username && $this->password) {$this->mqtt->connect(true, NULL, $this->username, $this->password);} else {$this->mqtt->connect(true);}}public function publish($topic, $message){return $this->mqtt->publish($topic, $message, 0);}public function subscribe($topic, $callback){$this->mqtt->subscribe($topic, 0, function($topic, $msg) use ($callback) {$callback($topic, $msg);});// 保持连接以接收消息while ($this->mqtt->proc()) {// 阻塞并处理消息}}
}
php
- 使用 MQTT 服务发布消息
你可以在控制器或其他地方使用 MqttService 来发布消息。例如,在 app/controller/MqttController.php 中:
<?phpnamespace app\controller;use support\Request;
use app\service\MqttService;class MqttController
{protected $mqttService;public function __construct(MqttService $mqttService){$this->mqttService = $mqttService;}public function publishMessage(Request $request){$topic = $request->input('topic');$message = $request->input('message');$result = $this->mqttService->publish($topic, $message);return json(['result' => $result]);}
}
php
- 使用 MQTT 服务订阅消息
订阅消息通常是在后台运行的,因此你可能需要创建一个独立的脚本或命令来运行它。例如,在 app/command/MqttSubscribeCommand.php 中:
<?phpnamespace app\command;use app\service\MqttService;
use support\BaseCommand;class MqttSubscribeCommand extends BaseCommand
{protected $mqttService;public function __construct(MqttService $mqttService){$this->mqttService = $mqttService;}public function handle(){$topic = 'your/topic';$this->mqttService->subscribe($topic, function($topic, $message) {echo "Received message on topic [$topic]: $message\n";});}
}
然后,你可以通过命令行运行这个命令:
php webman mqtt:subscribe
注意事项
持久连接:在订阅消息时,while ($this->mqtt->proc()) 会阻塞当前进程并持续处理消息。在生产环境中,你可能需要将其运行在守护进程或后台任务中。
错误处理:示例代码中没有包含详细的错误处理逻辑,你需要根据实际需求添加适当的错误处理。
安全性:确保 MQTT 服务器地址、端口、用户名和密码等敏感信息的安全。
通过上述步骤,你应该能够在 Webman 框架中成功使用 MQTT 进行消息的发布和订阅。