前文已经在啊里云宝塔中搭建好mqtt服务器,这里就在tp5及小程序中实现订阅及发布

一、tp5实现

1、先上网下载phpMQTT.php文件
https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php
网上下载的文件放入tp5文件后,有很多:void红色错误,可能和我的phpstorm有冲突,手动把所有红色提示错误修改

2、在tp目录extend中,创建文件夹phpmqtt,把上下好的phpMQTT.php文件放到这里,phpMQTT.php文件中修改 namespace phpmqtt

3、在admin/controller中创建自定义php文件,这里测试创建index,代码如下

 //mqtt发布public function pub(){// 客户端id  可以用随机数$client = "tp5Mqtt";// mqtt主机 主机,请配置为自己的主机$host = "120.xx.xx.xx";// mqtt端口$port = 1883;// 密钥 用于证书配置,如果需要ssl认证,则必须填写
//        $this->cert= 'ca.pem';// mqtt账号$username = "test";// mqtt密码$password = "123";// 订阅主题 订阅的主题,注意使用的主题一定要是mqtt配置过的主题,比如百度天工需要策略认证过的// 自己学习的时候,可以随意自定义,一般跟发布主题一致便可以收到消息// 如要要接受所有主题,请使用#$topics_name = "hometopic";//引入phpMQTT 创建mqtt实例Loader::import('phpmqtt/phpMQTT', EXTEND_PATH);$mqtt = new \phpmqtt\phpMQTT($host,$port,$client);//发布,发布内容可自定义,这里写死if ($mqtt->connect(true, NULL, $username, $password)) {$mqtt->publish($topics_name, 'Hello World! at ' . date('r'), 1, false);$mqtt->close();} else {echo "Time out!\n";}}/*** 订阅* 要使用命令行运行此方法!!!*  think5.0 运行方法为 在宝塔终端中,cd到Public 目录  然后用守户程序运行 nohup php index.php admin/index/sub &* 该类主要为订阅,建议订阅代码和发布代码不要写在同一个类中,避免修改造成不必要的误改。* 每次更新该类后需要重启mqtt订阅,否则新的改动不会生效。* 请在相应的位置放入phpMQTT的库* 库代码:https://github.com/bluerhinos/phpMQTT/blob/master/phpMQTT.php* 类库使用的时候注意命名空间,类名称命名要和thinkphp的保持一致,不然会报错*/public function sub(){// 客户端id  可以用随机数$client = "tp5Mqtt";// mqtt主机 主机,请配置为自己的主机$host = "120.xx.xx.xx";// mqtt端口$port = 1883;// 密钥 用于证书配置,如果需要ssl认证,则必须填写,正式上线前再修改
//        $this->cert= 'ca.pem';// mqtt账号$username = "test";// mqtt密码$password = "123";// 订阅主题 订阅的主题,注意使用的主题一定要是mqtt配置过的主题,比如百度天工需要策略认证过的// 自己学习的时候,可以随意自定义,一般跟发布主题一致便可以收到消息// 如要要接受所有主题,请使用#$topics_name = "hometopic";//引入phpMQTT 创建mqtt实例Loader::import('phpmqtt/phpMQTT', EXTEND_PATH);$mqtt = new \phpmqtt\phpMQTT($host,$port,$client);if(!$mqtt->connect(true, NULL, $username, $password)) {exit('error');   //连接失败} else {echo "success"; //连接成功}//topics["topic"]  为接受的主题名  需要和发送的主题名一致  否则会订阅不到//订阅信息 Qos为信息登记,需要和发送的等级一致$topics[$topics_name] = array("qos" => 1, "function" =>array($this,"onMessage"));$mqtt->subscribe($topics, 0);//死循环监听while($mqtt->proc()){}$mqtt->close();}/*** 在此处接MQtt的信息 进行业务处理* @param $topic* @param $msg*/function onMessage($topic,$msg){echo "---onMessage---";$data['topicName'] = $topic;$data['content'] = $msg;//保存数据到数据库LyTestModel::create($data);}

4、根据上面订阅代码,在宝塔中运行守护进行,可以实现订阅进保存数据到数据库
在宝塔终端中,cd到Public 目录 然后用守户程序运行 nohup php index.php admin/index/sub &
守护进程运行后,可以关必终端,会在后台运行(PS:在实战中,遇到命令端的php版本和后台的php版本不同,导致启动不了,可以在宝塔的网站,php命令行版本修改为同一版本,还要验证后台的启动是不是通过index.php)

5、在linux上查看进程ps aux

6、在linux上结束进程  
kill PID         可以结束指定PID进程
pkill -9 php index.php admin/index/sub        结束所有同名称进程

二、微信小程序实现

1、上网下载mqqt.min.js,放入utils中

2、js代码,内部测试体验服成功,正式上线,应该要把host切换为wss

// pages/test/test.js
//获取应用实例
const app = getApp();
var mqtt = require('../../utils/mqtt.min.js')
var client = null
Page({/*** 页面的初始数据*/data: {host: 'wx://120.xx.xx.xxx/mqtt',topic: 'homeTopic',username: 'test',password: '123',msg:{"msgType": 500,"queryType": 0,"devId": "d000001","txnNo": 1234567890123},},connectMqtt:function(){var that = thisconsole.log('connectMqtt')const options = {conectTimeout:4000,clientId: 'wx_' + parseInt(Math.random() * 100 + 800, 10),port:8083,username: that.data.username,password: that.data.password,}client = mqtt.connect(that.data.host,options)client.on('connect',(e) =>{console.log('服务器连接成功')client.subscribe(that.data.topic, {qos: 1}, function (err) {if (!err) {console.log('订阅成功')}})})client.on('message',function(topic,message){console.log('收到'+message.toString())})client.on('reconnect', (error)=> {console.log('正在重连:' , error)})client.on('error', (error) => {console.log('连接失败', error)})},open:function(){console.log('open')client.publish(this.data.topic, 'on')},close: function () {console.log('close')client.publish(this.data.topic, 'off')},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {this.connectMqtt()},})

注意:各种通信要联接好,注意topic主题名称,需要一致才能订阅,mqtt的qos,0,1,2分别代表什么,可以百度一下

tp5和微信小程序联接mqtt订阅及发布相关推荐

  1. 微信小程序使用mqtt接收和发布信息有时候接收和发送不到的问题

    将clientID改成随机的 原来的 clientId: 'emqx_cloud_miniprogram', 更改之后的 clientId: 'wx_' + parseInt(Math.random( ...

  2. 微信小程序使用MQTT远程控制单片机——阿里云物联网平台

    微信小程序使用MQTT远程控制单片机--阿里云物联网平台① 阿里云物联网平台的使用 第一,注册阿里云 第二,找到找到物联网平台并创建设备 MQTT协议格式的讲解 MQTT中文文档 固定报头 Fixed ...

  3. 微信小程序使用mqtt mpvue mosquito

    微信小程序使用mqtt 微信小程序使用mqtt,成功链接 准备: nginx 下载 wget http://nginx.org/download/nginx-1.6.2.tar.gz nginx 新增 ...

  4. php微信小程序多图上传,tp5实现微信小程序多图片上传到服务器功能

    最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助. 1,小程序端: 在wxml文件中: 删除 点击上传作业 在js文件中: Page({ / ...

  5. TP5之微信小程序推送模板消息

    TP5之微信小程序推送模板消息 1.获取formId并且存储起来,获取formId方法见: https://blog.csdn.net/u010481239/article/details/78239 ...

  6. uni-app.11.开发微信小程序实现消息订阅

    开发微信小程序实现消息订阅 使用场景 订阅消息 一次性订阅消息 长期订阅消息 实现步骤 1.获取模板ID 2.uni.requestSubscribeMessage 3.subscribeMessag ...

  7. uni-app.开发微信小程序实现消息订阅

    使用场景 在我们开发的小程序中司机首次登录需要先认证从业资质和车辆.司机在小程序端提交资料后,后台需要审核相关资料.审核结束后需要向司机推送相关的审核结果,这里就需要实现微信小程序的消息订阅 订阅消息 ...

  8. 微信小程序自定义输入仿咸鱼发布

    微信小程序自定义输入仿咸鱼发布 效果图 效果图2 主要代码 .js // pages/user/release/release.js import Toast from 'vant-weapp/toa ...

  9. 微信小程序开发(1)—— 微信小程序申请注册提交审核并发布详细流程

    一.微信小程序注册申请 作为开发者可以用测试版.也可以申请测试号.https://developers.weixin.qq.com/miniprogram/dev/devtools/sandbox.h ...

最新文章

  1. Html 教程 (5) “表格”三要素
  2. java编写简单计算器_编写java程序简单计算器
  3. python常见内置函数_python常见的内置函数
  4. dump、load和dumps、loads的联系与区别
  5. oracle归档日志保留时间,Oracle 11g Data Guard 备库归档日志清理脚本(保留一周归档)...
  6. 训练过程acc_AI 深度学习训练tricks总结(均有实验支撑)
  7. python对象点方法_python面向对象知识点疏理
  8. [bzoj2242] [SDOI2011]计算器
  9. 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
  10. 【正则表达式】sql语句去掉注释代码
  11. opencv处理视频颠倒问题
  12. 中过滤记录中时间_初效板式过滤器使用中这些事情你要知道?
  13. 动态页面html jquery ajax,JQuery / AJAX:使用动态内容加载外部DIV
  14. 小米路由2+安装+php,小米路由器作为二级路由,完美使用APP和文件共享
  15. 驾驶习惯也能识人?基于时空孪生神经网络的轨迹识别
  16. mysql多线程复制crash_MySQL 并行复制(MTS) 从库发生异常crash分析
  17. 高考证件照要求什么底色
  18. 2022年营收增长高达70%,智云健康“医院为先”战略成效持续凸显
  19. springboot使用ResourceUtils.getFile读取不到文件
  20. 计算机网络笔记4 网络层

热门文章

  1. 楼氏电子推出具有高级功能的人工智能型TWS开发套件
  2. 微信lbs开发java_【微信公众平台开发】之三:LBS的开发
  3. win10高危服务_您可以安全地禁用哪些Win10服务?
  4. 【Java学习】JUC并发编程
  5. Laravel-hyn/multi-tenancy多租户扩展的使用
  6. 三菱GX Developer+GX Simulator进行仿真调试
  7. iPhone的快捷键
  8. 跑步戴哪种耳机好,最适合运动跑步的蓝牙耳机
  9. 每天学一个 Linux 命令(89):alias/unalias
  10. [leetcode Q50] Pow(x, n)