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有网,但系统仍走着有线导致无法上网。 二、方法 过…...
Spring Boot服务半夜OOM?别慌!手把手教你用jmap和VisualVM 2.0.7分析dump文件定位Bug
Spring Boot服务半夜OOM?别慌!手把手教你用jmap和VisualVM 2.0.7分析dump文件定位Bug 凌晨三点,监控系统突然报警——某Spring Cloud微服务节点内存占用突破阈值。作为值班工程师,你需要在最短时间内定位问题根源。本文将带你体验…...
全平台B站资源管理效率工具:BiliTools全方位解决方案
全平台B站资源管理效率工具:BiliTools全方位解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools 在…...
OpCore Simplify:3步搞定黑苹果配置的终极简化指南
OpCore Simplify:3步搞定黑苹果配置的终极简化指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经因为复杂的OpenCore EFI配置…...
PlotJuggler FFT工具箱技术解析:从信号到频谱的实战指南
PlotJuggler FFT工具箱技术解析:从信号到频谱的实战指南 【免费下载链接】PlotJuggler The Time Series Visualization Tool that you deserve. 项目地址: https://gitcode.com/gh_mirrors/pl/PlotJuggler 在工程数据分析领域,信号分析是揭示系统…...
快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本
快速原型实践:利用快马AI一键生成正版软件9.1自动化安装脚本 最近在帮朋友部署一个数据分析环境,需要批量安装正版软件9.1版本。手动安装不仅耗时,还容易出错。于是我开始研究如何用Python写一个自动化安装脚本,没想到在InsCode(…...
避坑指南:用CloudCompare做点云标注时,90%的人都会忽略的‘顺序’问题
避坑指南:用CloudCompare做点云标注时,90%的人都会忽略的‘顺序’问题 在三维点云处理领域,标注数据的质量直接决定了后续模型训练的可靠性。许多开发者在使用CloudCompare完成标注流程后,往往会遇到一个隐蔽却致命的问题——点云…...
Apex Legends智能压枪宏:自动武器检测与多分辨率支持的终极解决方案
Apex Legends智能压枪宏:自动武器检测与多分辨率支持的终极解决方案 【免费下载链接】Apex-NoRecoil-2021 Scripts to reduce recoil for Apex Legends. (auto weapon detection, support multiple resolutions) 项目地址: https://gitcode.com/gh_mirrors/ap/Ape…...
WebLogic管理控制台超时配置实战:5个关键参数详解与优化建议(附12.2.1.4配置截图)
WebLogic管理控制台超时配置实战:5个关键参数详解与优化建议 每次登录WebLogic管理控制台时,你是否注意到那些隐藏在配置深处的超时参数?这些看似简单的数字背后,实则影响着系统性能、安全性和用户体验。作为一位长期与WebLogic打…...
终极指南:如何用ComfyUI-VideoHelperSuite快速构建专业视频工作流
终极指南:如何用ComfyUI-VideoHelperSuite快速构建专业视频工作流 【免费下载链接】ComfyUI-VideoHelperSuite Nodes related to video workflows 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-VideoHelperSuite 想要在ComfyUI中轻松处理视频内容&a…...
Stable Yogi Leather-Dress-Collection光影艺术:模拟不同灯光下的皮革质感
Stable Yogi Leather-Dress-Collection光影艺术:模拟不同灯光下的皮革质感 你有没有想过,一件衣服在不同的光线下,会呈现出怎样截然不同的气质?一件黑色的皮革连衣裙,在午后的阳光下可能显得温润柔和,在舞…...
