当前位置: 首页 > news >正文

php 中使用MQTT

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。

本文主要介绍如何在 PHP项目中使用composer require php-mqtt/client库 ,实现客户端与 MQTT 服务器 的连接、订阅、收发消息等功能。

<?phpnamespace app\command;use PhpMqtt\Client\ConnectionSettings;
use PhpMqtt\Client\MqttClient;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use util\LogHelperUtil;// composer require php-mqtt/client
class Mqtt extends Command
{protected function configure(){$this->setName('mqtt')->setDescription('mqtt Hello');}protected function execute(Input $input, Output $output){$mqttConfig = config('mqtt');// MQTT代理的配置$server = $mqttConfig['host'] ?? ''; // MQTT代理的地址$port = $mqttConfig['port'] ?? 1883; // MQTT代理的端口$username = 'test_mqtt'; // MQTT代理的用户名(如果需要)$password = '123456'; // MQTT代理的密码(如果需要)$clientId = 'service-mqtt-' . time(); // 客户端IDtry {// 创建MQTT客户端实例$mqtt = new MqttClient($server, intval($port), $clientId);$settings = (new ConnectionSettings())->setUsername($username)->setPassword($password)->setKeepAliveInterval(10)   // 根据需要设置心跳间隔->setReconnectAutomatically(true) // 是否会尝试自动重新连接->setDelayBetweenReconnectAttempts(2000) // 定义重新连接尝试之间的延迟(毫秒)。->setMaxReconnectAttempts(10); // 重新连接的最大尝试次数$mqtt->connect($settings); // 连接到MQTT代理// 订阅一个主题$topic = 'testtopic/#';$mqtt->subscribe($topic, function ($topic, $message) use ($mqtt) {$time = self::getTime("Y年m月d日G时i分s秒x毫秒");echo "{$time} 主题:{$topic} - 收到:" . ($message) . PHP_EOL;if ($topic != 'testtopic/service/2' && $topic != 'testtopic/golang') {$mqtt->publish('testtopic/service/2', "hello[{$topic}]", 2, true);}}, 2);// 保持脚本运行,以便接收消息
//            while ($mqtt->isConnected()) {
//                $mqtt->loop();
//            }$mqtt->loop();
//            $mqtt->disconnect(); // 断开连接} catch (\Exception $e) {echo "MQTT Error: " . $e->getMessage();}$output->writeln("Received message on topic");}private static function getTime($tag){list($usec, $sec) = explode(" ", microtime());$now_time = $sec . '.' . substr($usec, 2, 4);list($usec, $sec) = explode(".", $now_time);$date = date($tag, $usec);return str_replace('x', $sec, $date);}
}

相关文章:

  • 小白从0学习网站搭建的关键事项和避坑指南
  • YYF桌面tv版固件包获取渠道-官方桌面免费下载安装攻略
  • 从 Ext 到 F2FS,Linux 文件系统与存储技术全面解析
  • 新生宿舍管理系统
  • 大模型在急性单纯性阑尾炎预测及治疗方案制定中的应用研究
  • 【系统搭建】DPDK关键概念与l2fwd源码解析
  • 迭代器模式(Iterator Pattern)
  • oracle查询当前用户所有字段和表
  • GPU怎么绑定到服务器上
  • 纳什均衡(Nash Equilibrium) 的详细解析,涵盖定义、关键特性、经典案例及应用价值
  • Java JDK 17 自带的 java.net.http.HttpClient入门案例
  • 十二脏腑阴阳属性的全面总结
  • Qt6 以后,QSettings 读取ini 文件固定使用utf-8 编码
  • Coco-AI 接入自定义数据源
  • 基于springboot医药连锁店管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • selenium 实现模拟登录中的滑块验证功能
  • 【android telecom 框架分析 01】【基本介绍 1】【telecom服务是干什么的?】
  • Linux软件仓库
  • 管家婆工贸ERP BB104.采购费用均价分摊
  • 【.net core】【watercloud】数据库连接报错问题
  • 潘功胜:将下调个人住房公积金贷款利率0.25个百分点
  • 呼和浩特65户业主被一房两卖,十年诉讼却难胜
  • 上海市委常委会扩大会议传达学习习近平总书记考察上海重要讲话和在部分省区市“十五五”时期经济社会发展座谈会上的重要讲话精神
  • 重温经典|中国首部剪纸动画片《猪八戒吃瓜》创作始末
  • 罗马尼亚总理乔拉库宣布辞职
  • 贵州黔西游船发生侧翻事故,游客:事发时能见度只有一米,所乘船只停靠礁石避险