第一步:下载phpMQTT扩展下载地址,然后放在了扩展文件夹中
第二步:下载 workerman/mqtt 官方地址
通过composer进行安装
composer require workerman/mqtt
因为我是之前有用workerman做websocket做硬件做了一份与门禁设备进行连接使用,因为是全双工的,设备相当于一直都在给服务器发送,然后通过心跳数据给设备返回数据,现在用MQTT就不会有心跳监测
好了原归正题下载好了之后
这里头有两个demo,一个是订阅,一个是发布我们只用到了订阅
然后再worker_server.php文件中配置这里红色方块中的红色线是我的MQTT订阅控制器
各位老铁要注意的是,window只能跑一个,linux能多个worker,注意一下。
第三步、给老铁看下代码
onConnect = function($mqtt) { $list=Device::where(['is_delete'=>0])->column('device_sn'); foreach($list as $device_sn){ //'/dataUpload/'.$device_sn 跟发送方的一致就可以发送 $mqtt->subscribe('/dataUpload/'.$device_sn); } }; $mqtt->onMessage = function($topic, $content){ $data = json_decode($content,true); //这里是你的业务代码下面是我的业务代码,给铁子们看下 if(isset($data['cmd'])){ if($data['cmd']==34){ Device::where('device_sn',$data['device_sn'])->update(['status'=>1]); } //var_dump($data); Cache::set('MQTT_XSJ_SN_'.$data['device_sn'],$data); } }; $mqtt->connect();}}
第四步、运行
命令为 php think worker:server
跟这个同级文件下运行上面命令即可
window差不多就是上面的样子。
然后现在来说下phpMQTT用API接口去调用去发布消息
就以这个函数为例吧
getRootPath() .'/extend/phpMQTT-master/phpMQTT.php'); $server = "我是服务器IP或者域名"; // change if necessary 服务器IP $port = 1883;端口 一般是1883 $username = "LOVE"; // mosquitto设置的用户名 $password = "123456"; //mosquitto设置的密码 foreach($device_sn_list as $device_sn){ $client_id='/sendCmd/'.$device_sn; //我是客户ID $mqtt = new phpMQTT($server, $port, $client_id); //进行连接 //连接 if ($mqtt->connect(false, NULL, $username, $password)) { $mqtt->publish($client_id,'{"cmd":34,"cmd_reply":1,"cmd_reply_id":1}'); $mqtt->close(); //关闭 } } }}
上面就是MQTT的与ThinkPHP6.0的使用了。
还没完,肯定有人说啥是MQTT,我window要怎么用,我一脸懵逼。下面我给您介绍下
一、下载mosquitto
点击下载安装程序 下载地址
二、配置mosquitto
1. 安装路径打开命令行界面
2. 设置user及password
执行:mosquitto_passwd.exe -c pwfile.example -u vic 设置用户名:vic 设置密码:123456
3. 配置文件检查
mosquitto.exe -c mosquitto.conf 未报错说明配置正常
4. 设置端口
默认端口:1883 打开power shell ,cd到安装路径 cd D:\software\mosquitto 启动:.\mosquitto.exe 指定端口启动:mosquitto.exe -p 10086
5. 订阅者
mosquitto_sub.exe -h 127.0.0.1 -p 10086 -t topicTest01 -u vic -P 123456
6. 发布者
mosquitto_pub.exe -h 127.0.0.1 -p 10086 -u admin -P 111 -t topicTest01 -m "hello world"
7. 命令行测试
三、MQTTX
1. 连接服务器
2. 订阅topic
3. 发布消息
————————————————
这几个图是一位作者的
根据上面的运行你也可以得到上面的效果,这边额外再补充一下,因为设备连接的是局域网,那我改怎么调试呢,在配置文件中加入
allow_anonymous truelistener 1883 0.0.0.0
————————————————
其中window上的mosquitto安装为https://blog.csdn.net/no_hot/article/details/122540087 复制
我给大家来个linux吧
下面由宝塔教程栏目给大家介绍宝塔面板下安装Mosquitto-php扩展方法,希望对需要的朋友有所帮助!
宝塔面板下安装Mosquitto-php扩展
MQTT 是物联网的消息传送协议标准。
在 CentOS 7上常用的开源 MQTT 消息服务器就是 Mosquitto。
我们用 PECL 来安装 Mosquitto 的 PHP 实现。
首先要确保 php-devel 已经安装:
# yum install -y php-devel
然后确保 mosquitto-devel 也已经安装:
yum install -y mosquitto-devel
由于宝塔是多环境共存,以下以PHP7.1为例
再用 pecl 来安装 Mosquitto-PHP
# /www/server/php/71/bin/pecl install Mosquitto-alpha
然后去 /www/server/php/71/etc/php.ini 添加一行:
extension=mosquitto.so
重启 服务后,运行 php -i|grep mosquitto 可以看到
mosquitto
libmosquitto version => 1.4.13
表明 PHP 可以使用 mosquitto 的 MQTT 库了。
下面是用 PHP 来发送消息的示例代码 mosquitto-test.php:
setCredentials($username, $password); 14 $c->onConnect(function() use ($c) { 15 global $topic,$msg,$qos; 16 $c->publish($topic, $msg, $qos); 17 }); 18 19 $host = '192.168.1.16'; 20 21 $c->connect($host); 22 for ($i = 0; $i < 100; $i++) { 23 // Loop around to permit the library to do its work 24 $c->loop(1); 25 } 26 27 echo "结束\\n";
然后运行 php mosqitto-test.php
另外开启一个终端,用
# mosquitto_sub -h 192.168.1.16 -u username -P Passw0rd -t test
可以看到 PHP 程序发送的消息: "hello你好".
以上就是宝塔面板下怎么安装Mosquitto-php扩展的详细内容
来源地址:https://blog.csdn.net/qq_23013025/article/details/124365453