php 对接mqtt 完整版本,订阅消息,发送消息
首先打开链接如何在 PHP 项目中使用 MQTT
根据文章让所用依赖安装一下: composer require php-mqtt/client
安装之后弄一个部署

之后在工具里边可以相应链接上

接下来是代码:
/**** 订阅消息* @return void* @throws \PhpMqtt\Client\Exceptions\ConfigurationInvalidException* @throws \PhpMqtt\Client\Exceptions\ConnectingToBrokerFailedException* @throws \PhpMqtt\Client\Exceptions\DataTransferException* @throws \PhpMqtt\Client\Exceptions\InvalidMessageException* @throws \PhpMqtt\Client\Exceptions\MqttClientException* @throws \PhpMqtt\Client\Exceptions\ProtocolNotSupportedException* @throws \PhpMqtt\Client\Exceptions\ProtocolViolationException* @throws \PhpMqtt\Client\Exceptions\RepositoryException*/public function dingyue(){$server = '*********.aliyun.emqxcloud.cn';//连接地址$port = 1883;$clientId = rand(5, 15);$username = '用户名';$password = '密码';$clean_session = false;$mqtt_version = MqttClient::MQTT_3_1_1;$connectionSettings = (new ConnectionSettings)->setUsername($username)->setPassword($password)->setKeepAliveInterval(60)->setLastWillTopic('emqx/test/last-will')->setLastWillMessage('client disconnect')->setLastWillQualityOfService(1);$mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);$mqtt->connect($connectionSettings, $clean_session);//订阅消息// 下边是轮询订阅,订阅多个设备// 查数据库中设备列表$list = DeviceBall::where(['topic'=>['<>','']])->field('topic')->select();
// 获取topic$list = array_column($list, 'topic');//去重$list = array_unique($list);
// dump($list);exit;foreach ($list as $i) {$mqtt->subscribe('CIOT/2000/DEVICE/' . $i, function ($topic,$message) use ($mqtt, $i) {printf("Received message on topic [%s]: %s\n", $topic, $message);$message = json_decode($message, true);if (isset($message['Body']['Info']['Msg']['Pass'])) {if ($message['Body']['Info']['Msg']['Pass'] == 1) {
// 关闭订单$ball_id = DeviceBall::where(['topic' => $i])->find();$order_no = BallOrder::where(['ball_id' => $ball_id['id']])->order('id DESC')->where('status', 1)->value('order_no');$this->confirmorder($order_no);//语音指令,提前关闭,电源关闭$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["MsgId" => time(),'Cmd' => "Voice",'Index' => 41]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);//可以关闭锁球器//发送关闭指令$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["Mode" => "0","MsgId" => time(),'Cmd' => "Order",'ID' => 1,'Delay' => 0,'Type' => 0,"DCL" => 0,]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);} else {//异常,播报语音,不关闭锁球器,关锁失败请检车$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["MsgId" => time(),'Cmd' => "Voice",'Index' => 45]);$mqtt->publish(// topic'CIOT/2000/HOST/' . $i,// payloadjson_encode($payload),// qos0,// retaintrue);}}}, 0);}$mqtt->loop(true);}
发送指令
static function publish(){$server = '********ted.aliyun.emqxcloud.cn';$port = 1883;$clientId = rand(5, 15);$username = '用户名';$password = '密码';$clean_session = false;$mqtt_version = MqttClient::MQTT_3_1_1;$connectionSettings = (new ConnectionSettings)->setUsername($username)->setPassword($password)->setKeepAliveInterval(60)->setLastWillTopic('emqx/test/last-will')->setLastWillMessage('client disconnect')->setLastWillQualityOfService(1);$mqtt = new MqttClient($server, $port, $clientId, $mqtt_version);$mqtt->connect($connectionSettings, $clean_session);$payload = array('Header' => ["Code" => '1004',"Time" => time() . '000',"Sign" => "lvzaina"],'Body' => ["Mode" => "0","MsgId" => time(),'Cmd' => "Check",]);$mqtt->publish(// topic'CIOT/2000/HOST/RE2BBEEC78',//推送的地址// payloadjson_encode($payload),// qos0,// retaintrue);}
上边是代码,下边事最重要的
1首先如果在本地测试的话,新建一个.bat文件,放在根目录

.bat文件内容,然后双击文件执行,这里执行的是上边订阅消息的方法,执行之后,可以在小黑窗里边看到打印的信息
chcp 65001
@echo off
:loop
E:\phpstudy_pro\Extensions\php\php7.4.3nts\php.exe public/index.php api/Billiards/dingyue
ping -n 3 127.1 >nul
goto loop
pause
2,如果是在linux中执行
新建一个.sh文件

.sh文件内容
#!/bin/bash
while true
do# 这里是要执行的代码/www/server/php/72/bin/php public/index.php api/Billiards/dingyue# 这里是要执行的代码endDate=`date +"%Y-%m-%d %H:%M:%S"`echo "At [$endDate] Successful"echo "----------------------------------------------------------------------------"sleep 3
done

开启列队:运行队列的代码
nohup bash run-api.sh >> run-api.out &
然后敲回车敲两下
查看执行文件返回内容
tail -f run-api.out

执行前,要看下是否已经在运行:
ps aux | grep bash

如果已经在执行
结束命令:
kill -9 进程号(256300)
然后再执行ps aux | grep bash 看是否已经停止,重新启动即可。
这样一个.sh文件就启动了
相关文章:
php 对接mqtt 完整版本,订阅消息,发送消息
首先打开链接如何在 PHP 项目中使用 MQTT 根据文章让所用依赖安装一下: composer require php-mqtt/client 安装之后弄一个部署 之后在工具里边可以相应链接上 接下来是代码: /**** 订阅消息* return void* throws \PhpMqtt\Client\Exceptions\Confi…...
谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他
这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇,主要涉及算分方法和同义词加载的部分。 自定义算分:script_score 2.0 Elasticsearch 7.0 引入了新一代的函数分数功能,称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来…...
【苍穹外卖】问题笔记
【DAY1 】 1.VCS找不到 好吧,发现没安git 接着发现安全模式有问题,点开代码信任此项目 2.导入初始文件,全员爆红 好像没maven,配一个 并在设置里设置好maven 3.启用注解,见新手苍穹 pom.xml改lombok版本为1.1…...
脑机接口SSVEP 信号特征提取技术术语
目录 背景简介 1. 最小能量组合(MEC)和最大对比组合(MCC) 2. 典型相关分析(CCA) 3. 滤波器组CCA(FBCCA) 4. 二进制子带CCA(BsCCA) 5. 融合CCAÿ…...
【Veristand】Veristand 预编写教程目录
很久没有更新,最近打算出一期Veristand教程,暂时目录列成下面这个表格,如果各位有关心的遗漏的点,可以在评论区提问,我后期可以考虑添加进去,但是提前声明,太过小众的点我不会,欢迎各…...
C#光速入门的指南
以下是一份C#快速入门的指南,涵盖了基础语法、面向对象编程、输入输出、异常处理等方面,帮助你快速上手C#。 1. 开发环境搭建 要开始使用C#进行编程,你需要安装开发环境。最常用的是Visual Studio,它提供了丰富的工具和功能&…...
深入探索 STM32 微控制器:从基础到实践
一、引言 在当今的嵌入式系统领域,STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景,成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备,还是在消费电子等领域,STM32 都展现出了强大的生命力…...
Oracle性能调优(一):时间模型统计
Oracle性能调优(一):时间模型统计 时间模型统计视图时间模型统计指标时间模型统计视图 📖 DB Time的含义: DB Time表示前台会话在数据库调用中所花费的总时间,它是衡量数据库实例总负载的一个重要指标。DB Time是从实例启动时开始累计测量的,其计算方法是将所有前台会话…...
前端Npm面试题及参考答案
目录 npm 是什么?它的主要作用是什么? npm 包管理工具与 Yarn 有何不同? npm 的 package.json 文件有哪些重要字段? 什么是 npm 依赖?如何在项目中安装、更新和移除依赖? npm 的 node_modules 目录是什么?它的作用是什么? 什么是 npm 脚本?如何在 package.json 中…...
记一次线上Tomcat服务内存溢出的问题处理
背景:JavaWeb项目部署在Tomcat服务器上,服务器用的Windows。 问题表现:系统出现偶发性无法访问(隔几天就会在早上无法访问) Tomcat的日志catalina中,有如下报错信息。 java.lang.OutOfMemoryError: GC ov…...
nist关于rsa中p,q的要求
NIST.FIPS.186-4 美国国家标准与技术研究院(National Institute of Standards and Technology,NIST) FIPS,美国联邦信息处理标准(Federal Information Processing Standard) Criteria for IFC Key Pairs B.3.1 Crite…...
Vue3项目如何使用TailWind CSS保姆级教程
一、简单介绍一下TailWind CSS TailWind CSS是一个实用工具优先的 CSS 框架,它通过提供大量的原子化 CSS 类,允许开发者通过组合这些类来快速构建界面,而无需编写额外的 CSS 文件。这种设计理念使得开发过程更加直观和高效ÿ…...
NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)
B2093 查找特定的值 - 洛谷 题⽬要求下标是从0开始的,和数组的下标是吻合的,存放数据应该从下标0开始n的取值范围是1~10000数组中存放的值的绝对值不超10000,说明int类型就⾜够了找到了输出下标,找不到要输出-1,这⼀点…...
Mysql的索引失效
MySQL 的索引失效指的是:尽管在表上建立了索引,但在某些查询场景下,MySQL 优化器却没有利用这些索引,从而导致查询走了全表扫描,性能大大降低。下面详细说明几种常见的导致索引失效的情况及其原因: 1. 对索…...
现代前端框架渲染机制深度解析:虚拟DOM到编译时优化
引言:前端框架的性能进化论 TikTok Web将React 18迁移至Vue 3后,点击响应延迟降低42%,内存占用减少35%。Shopify采用Svelte重构核心交互模块,首帧渲染速度提升580%。Discord在Next.js 14中启用React Server Components后…...
set 和 map 的左右护卫 【刷题反思】
1. 相近的营业额 1.1 题目 题目描述:我们定义,一天营业额的最小波动 min { | 该天以前某一天的营业额 - 该天营业额 | } 特别的,第一天的营业额最小波动为第一天的营业额 输入描述:第一行 n (n < 32767…...
【Linux高级IO】多路转接(poll epoll)
目录 1. poll 2. epoll 2.1 epoll_ctl 2.2 epoll_wait 2.3 epoll原理 2.4 epoll的工作模式 2.5 epoll的惊群效应 使用建议 总结 1. poll poll也是实现 I/O 多路复用的系统调用,可以解决select等待fd上限的问题,将输入输出参数分离,不需要…...
Linux上用C++和GCC开发程序实现两个不同PostgreSQL实例下单个数据库中多个Schema稳定高效的数据迁移到其它PostgreSQL实例
设计一个在Linux上运行的GCC C程序,同时连接三个不同的PostgreSQL实例,其中两个实例中分别有两个数据库中多个Schema的表结构分别与第三实例中两个数据库中多个Schema个结构完全相同,同时复制两个实例中两个数据库中多个Schema里的所有表的数…...
Linux下的网络通信编程
在不同主机之间,进行进程间的通信。 1解决主机之间硬件的互通 2.解决主机之间软件的互通. 3.IP地址:来区分不同的主机(软件地址) 4.MAC地址:硬件地址 5.端口号:区分同一主机上的不同应用进程 网络协议…...
Windows在多网络下指定上网接口
Windows在多网络下指定上网接口 一、说明 设备情况:win11,同时连接了有线网和WLAN,有线网连接着NAS必须保持连接。需求:有些情况时,有线网无网络而WLAN有网,但系统仍走着有线导致无法上网。 二、方法 过…...
DMXAPI:国产多模态大模型API聚合平台,让开发者一键调用通义千问等主流模型
在国产大模型百花齐放的今天,如何高效、稳定地接入各类模型能力,成为开发者和企业面临的核心痛点。DMXAPI 应运而生,作为中国多模态大模型API聚合平台,致力于打造"国产模型一站式调用中心",让开发者无需对接…...
Navicat Premium16 免费安装配置教程(附安装包)
一、下载安装包 官网下载:https://www.navicat.com.cn/products#navicat 可直接网盘下载 链接:https://pan.baidu.com/s/1t3Tx0c8gEaMEifGow_05aQ?pwd8888 二、安装过程 1. 双击安装包 2. 选中“我同意”,点击“下一步”。 3.…...
智慧农业棉花棉铃病害成熟度识别分割数据集labelme格式969张6类别
数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):969标注数量(json文件个数):969标注类别数:6标注类别名称:["jiankangmianling","qingdubinghai"…...
VideoDownloadHelper:打破视频下载壁垒的智能解析引擎
VideoDownloadHelper:打破视频下载壁垒的智能解析引擎 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾遇到这样的情况&am…...
Taotoken多模型路由在单一服务故障时的体验保障
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型路由在单一服务故障时的体验保障 1. 引言 在构建依赖大模型能力的应用时,服务的稳定性是开发者必须面对…...
DECA加速器:神经网络模型压缩的硬件优化方案
1. DECA加速器:神经网络模型压缩的硬件突围在AI推理领域,模型压缩技术如同给神经网络"瘦身"——通过量化和稀疏化减少参数规模,但压缩后的数据需要解压才能计算,这个"拆包装"的过程往往成为性能瓶颈。传统CPU…...
混合精度递归Cholesky分解:算法优化与硬件加速实践
1. 混合精度递归Cholesky分解的技术背景在科学计算领域,对称正定(SPD)线性系统的求解是一个基础而关键的问题。这类问题广泛存在于计算流体动力学、气候建模、金融风险分析等实际应用中。以气候建模为例,全球大气环流模型需要求解的线性系统矩阵规模可达…...
洛雪音乐音源项目完整指南:免费获取全网高品质音乐的终极解决方案
洛雪音乐音源项目完整指南:免费获取全网高品质音乐的终极解决方案 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 洛雪音乐音源项目是一个专为洛雪音乐软件设计的开源音源集合…...
hoverboard-firmware-hack-FOC与ROS集成指南:机器人操作系统通信接口开发
hoverboard-firmware-hack-FOC与ROS集成指南:机器人操作系统通信接口开发 【免费下载链接】hoverboard-firmware-hack-FOC With Field Oriented Control (FOC) 项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC hoverboard-f…...
12点标定
12点标定九点标定和十二点标定转换本质是两个平面二维空间的转换两个平面的二维空间的转换公式X物理 X图像200 k * 2 k缩放系数 k2/2000.01剪切图像是一个标准的二维平面空间物理世界,某个固定高度的平面物理空间 高度为5的,板子的所在的物理平面空间…...
