一篇就够:uniapp-Mqtt系列问题详细攻略(解决掉线、真机调试错误等问题)

😹背景

昨天搞了一天,我觉得新手可以参考我这篇文章思路,避免你和我一样踩坑,刚好去年的这几天也在搞mqtt,不过当时弄的是微信小程序,这次项目是uniapp,我想实现uniapp中的h5能够使用mqtt,转换成小程序后也能直接使用,后面成功了,但是也付出了点代价,接近弄了5个小时,一直在犹豫要不要发出来记录一下,后面还是妥协了,因为我怕下次我用到又继续像昨天那样,
本次解决了:

  • uniapp双端转换mqtt通讯问题
  • 微信小程序合法域名配置SSL问题
  • 微信wxs协议配置问题
  • mqtt重复断线连接问题

🙏如果这篇文章对你有帮助还请收藏点赞+关注🙏

在这里插入图片描述

推荐Mqtt相关文章(也许能帮到你)
《解决微信小程序MQTT真机连接问题与合法域名配置SSL问题》
《解决微信小程序MQTT通讯真机调试失败的问题附加可用代码》
《Esp8266-01s、51单片机实现连接MQTT踩坑:附加烧录安信可固件+宝塔搭建MQTT服务器 全套攻略》

推荐专栏
⭐⭐欢迎订阅⭐⭐
⭐⭐这是我的付费专栏,希望你可以订阅支持我🙏~⭐⭐
🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐
⭐⭐欢迎订阅⭐⭐
该专栏下的往期文章:
【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口


目录

  • 😹背景
  • 😿Mqtt公共服务器
  • 😿我的Mqtt服务器
  • 💛遇到的问题
    • 1、公共服务器的问题
    • 2、协议问题
    • 3、连接问题
    • 4、真机调试连接不上
    • 5、问题总结
  • 💛问题解决流程
    • 🎄搭建私有免费Mqtt服务器(emqx)
      • 1.下载
      • 2.开放端口
      • 3.测试使用
      • 4.配置反向代理
    • 🎄编写uniapp-mqtt-demo完成连接收发测试
    • 🎄更换mqtt.js文件,再做测试
    • 🎄重复断线练级问题
    • 🎄运行演示、真机演示
  • 💛总结


😿Mqtt公共服务器

emqx,这个我觉得不错,搭配上工具MQTT 5.0 客户端工具就很完美,后面的私有服务器根据他开源版本,来搭建的
在这里插入图片描述


😿我的Mqtt服务器

这部分我考虑长期开放,测试中大家可以用我的

平台协议接口
uniapp等h5wsws://mqtt.taila.club:8083
uniapp等h5wss(证书)wss://mqtt.taila.club:443
微信小程序wxwx://mqtt.taila.club:8083
微信小程序wxs(证书)wxs://mqtt.taila.club:443

💛遇到的问题

1、公共服务器的问题

emqx公共服务器除Tcp连接以外,其他端口时而能连接,有时候会收不到数据,我认为可能是协议5.0问题或者是公共服务器的问题、mqtt.js等问题,由于时间紧迫,没做排查
在进行mqtt调试的时候,我第一时间去dcloud插件市场找了mqtt相关的插件,发现uniapp小程序插件demo通过ws或wss都连接不上,公共服务器貌似只有MQTT 5.0 客户端工具能使用,像上面的这些端口:WebSocket 端口…只能在MQTT 5.0 客户端工具使用,tcp可以正常使用,可是小程序是不允许ip的必须要域名,当时我一直想用公共服务器,没有考虑到是对方的原因,认为是插件问题,几乎全网的代码我都尝试过了,都不行,后面我发现了个网站Hivemq
在这里插入图片描述

我用了他的端口以及域名,ws:api.easylink.io:1983/mqtt结果就连接上了,到这里我才明白,之前测试了这么多的demo原来并非代码问题,而是服务器问题,我在排查的时候没有考虑到服务器的原因,这是我耗费时间长的原因之一

2、协议问题

平台协议加密协议
uniapp、webwswss
微信小程序wxwxs(端口必须是443)

在转换小程序时记得通过条件编译去构造

// #ifdef H5hosts = 'ws://' + this.serve.host + ':' + this.serve.wsport + this.serve.path//hosts = 'tpc://' + this.serve.host + ':1883'//#endif// #ifdef MP-WEIXIN// wx仅仅可以使用体验版hosts = 'wxs://' + this.serve.host +':' + this.serve.wssport + this.serve.path//#endif

3、连接问题

我的客户端连接是Tcp连接的,emqx给的python代码是Tcp连接
uniapp小程序:需要使用ws连接、tcp测试连接失败
微信小程序:需要wx(不校验合法域名、调试上可用)或wxs

4、真机调试连接不上

Mqtt.js问题
猜测是版本原因,wx协议在小程序上勾选不校验合法域名能正常用,那在真机调试中也应该可以访问,可偏偏就是连接不上,办法:更换mqtt.js文件

5、问题总结

  1. 不使用mqtt公共服务器来做项目测试
  2. 需要知道协议转换,以及微信小程序的策略
  3. 真机调试不上,更换js文件

💛问题解决流程

🎄搭建私有免费Mqtt服务器(emqx)

宝塔搭建MQTT服务器

1.下载

首先,先将宝塔上安装Docker管理器(1、软件商店👉2、Docker管理器)在这里插入图片描述拉取emqx/emqx镜像(1、镜像管理👉2、镜像搜索)在这里插入图片描述
选择拉取
在这里插入图片描述
成功后在终端运行命令,或者加入定时计划运行即可:

docker run -dit --name emqx -p 18083:18083 -p 1883:1883 -p 8083:8083 -p 8084:8084 emqx/emqx:latestdocker exec -it  emqx /bin/sh

【我是因为忘记密码了,登陆不上去,可以用我的方法,也可以在终端】

1.终端
在这里插入图片描述

2.定时计划(配置后若服务器关机了,可以快速开启docker服务)
在这里插入图片描述
上述都要执行,一次即可!

2.开放端口

1883:MQTT 协议端口\TCP
8883:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口

先到服务器运营商开放,再去宝塔开放,不然没用
【我这里就不放运营商的开放截图了】
在这里插入图片描述

3.测试使用

http://云服务器公网IP:18083
账号: admin
密码: public

【我的是这样的】
在这里插入图片描述
通过MQTT手机端软件测试,可以用:
【软件怎么用自己去摸索哈】
在这里插入图片描述
【加入到同一个房间的设备可以在房间内互相发消息,读者可以自己测试】

4.配置反向代理

因为小程序需要域名,如果在其他平台ip足够了,接下来通过反向代理解决证书和域名问题(emqx的面板支持SSL大家根据自己的需要自己做选择,反向代理,只需要在自己的网站套上ssl即可,我认为比较方便)
解决思路:反向代理,通过添加域名设置反向代理,在小程序开发者配置添加合法域名即可

第一步:
在这里插入图片描述
第二步:(点击宝塔网站)
在这里插入图片描述
第三步:
在这里插入图片描述
第四步:(点击反向代理)
在这里插入图片描述
粘贴的代码:

    #持久化连接配置proxy_connect_timeout 30s;proxy_read_timeout 86400s;proxy_send_timeout  30s;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";

出错的话注释掉相同的代码,重新保存
在这里插入图片描述

第五步:配置网站ssl(先将反向代理关闭,否则宝塔不允许配置)

1、关闭反向代理后
2、点击ssl(配置证书)
在这里插入图片描述

在这里插入图片描述
3、配置好以后,打开反向代理,让其运行
在这里插入图片描述
4、所以我的域名现在支持

这部分我考虑长期开放,测试中大家可以用我的

平台协议接口
uniapp等h5wsws://mqtt.taila.club:8083
uniapp等h5wss(证书)wss://mqtt.taila.club:443
微信小程序wxwx://mqtt.taila.club:8083
微信小程序wxs(证书)wxs://mqtt.taila.club:443

🎄编写uniapp-mqtt-demo完成连接收发测试

建议下载完整代码,下面的代码不完整,插件市场下载

<template><view><button type="primary" @click="connect">mqtt 连接</button><button type="primary" @click="subscribe">mqtt 订阅</button><button type="primary" @click="publish">mqtt 发布</button><button type="primary" @click="unsubscribe">取消订阅</button><button type="primary" @click="unconnect">断开连接</button><view>message:{{ receiveMessage.toString() }}</view></view>
</template><script>import mqtt from '../../utils/mqtt.min.js';export default {data() {return {serve: {host: '****',wsport: '**',wssport:'443',path: '/mqtt',},onTopic: 'fasong',onSub: 'jieshou',Qos: 2,sendMassage: 'demo',time:0,receiveMessage: '',client: null,//MQTT连接的配置};},methods: {connect: function() {var hosts = '',// #ifdef H5hosts = 'ws://' + this.serve.host + ':' + this.serve.wsport + this.serve.path//hosts = 'tpc://' + this.serve.host + ':1883'//#endif// #ifdef MP-WEIXIN// wx仅仅可以使用体验版hosts = 'wxs://' + this.serve.host +':' + this.serve.wssport + this.serve.path//#endifconsole.log(hosts);if (this.client == null || this.client.connented == false) {}...},subscribe: function() {// 判断是否已成功连接if (!this.client || !this.client.connected) {this.showToast('客户端未连接', 1000)return;}...	},publish: function() {// 判断是否已成功连接if (!this.client || !this.client.connected) {this.showToast('客户端未连接', 1000)return;}if (this.sendMassage != '') {// var send = '{"code": 200, "msg": "发送打1111指令", "data": "2.doc"}';// 定义JSON对象...},unconnect: function() {if (!this.client || !this.client.connected) {this.showToast('客户端未连接', 1000)return;}this.client.end();this.client = nullthis.showToast('成功断开连接', 1000, 'success')console.log('断开连接');},showToast: function(title, time, icon = 'none') {uni.showToast({title: title,icon: icon,});setTimeout(function() {uni.hideToast();}, time);},},}
</script>
<style>button {margin-top: 30upx;margin-bottom: 30upx;}
</style>

🎄更换mqtt.js文件,再做测试

由于找不到报错前的js文件,这里就不做错误演示了,如果你的项目也有了这个问题直接替换就可以了

模拟器上测试可以,选中了不校验合法域名,真机调试没能连接服务器,解决思路换了个mqtt.js
可参考下面的js

https://unpkg.com/mqtt@2.18.8/dist/mqtt.min.js

更换路径:
在这里插入图片描述

🎄重复断线练级问题

这里出现此情况可能是反复调试的过程中,clientId都是同一个导致占线的问题
解决方法:

			let that=this;console.log(that.options.clientId)let clientId = "mqtt_" + Math.random().toString(16).substr(2, 8);console.log("生成的随机clientId为:" + clientId);that.options.clientId=clientId;

🎄运行演示、真机演示

不同的环境,自动适应不同的域名

uniapp演示,这里连接成功是做了判断的,数据也测试通过了,并不是只是弹窗哈
在这里插入图片描述

编译后,微信小程序演示:
在这里插入图片描述
模拟器效果图(手机上测试也通过了)
在这里插入图片描述
如果需要上线,请将wxs域名通过小程序后台合法域名白名单中
真机演示:
在这里插入图片描述

💛总结

以上就是今天分享的经验,对于还在摸索mqtt的你一定有帮助,这是我花了5个小时踩坑的经历,希望对你有用!

💥推荐我的爬虫文章(收费专栏-用心提高质量)💥
🤟《记一次云之家签到抓包》
🤟《记一次视频抓包m3u8解密过程》
🤟《抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos》
🤟《Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
🤟《某课抓包视频 安卓手机:黄鸟+某课app+VirtualXposed虚拟框架》

推荐专栏:

🤟《Python爬虫脚本项目实战》

该专栏往期文章:
🤟《【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)》

🥦如果感觉看完文章还不过瘾,欢迎查看我的其它专栏
🥦作者对python有很大的兴趣,完成过很多独立的项目:例如滇医通等等脚本,但是由于版权的原因下架了,爬虫这一类审核比较严谨,稍有不慎就侵权违规了,所以在保证质量的同时会对文章进行筛选

如果您对爬虫感兴趣请收藏或者订阅该专栏哦《Python爬虫脚本项目实战》,如果你有项目欢迎联系我,我会同步教程到本专栏!

⭐⭐欢迎订阅⭐⭐
在这里插入图片描述

🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语配音软件哪个好?

在英语的学习上最难的就是口语了&#xff0c;想要让发音变得更加标准&#xff0c;那么一定要体验几款英语配音的软件&#xff0c;最近就有一些小伙伴问到了英语配音app推荐免费的有哪些&#xff1f;好的英语配音软件可以让我们更好地完成英语的配音体验&#xff0c;还能体验多种…

股票大数据分析软件V2.7

分享一个在淘宝买的《股票大数据分析软件》给大家使用&#xff0c;售价是168元的软件&#xff01; 由于有业务要出国&#xff0c;短期不会回国&#xff0c;所以分享给广大股友使用&#xff01; 软件的主要作用是进行个股数据面的分析和选股的作用&#xff0c;软件的功能有龙虎榜…

运行通达信行情接口软件的电脑需要什么配置?

运行通达信行情接口软件电脑需要什么配置&#xff1f;目前除了机构之外&#xff0c;大部分的散户用的都是一些比较有名的电脑版股票软件&#xff0c;比如&#xff1a;通达信、同花顺、大智慧、东方财富等。通达信行情接口软件因为使用C语言编写&#xff0c;执行效率高&#xff…

chatgpt赋能python:用Python开发炒股软件:为什么Python是一个好的选择?

用Python开发炒股软件&#xff1a;为什么Python是一个好的选择&#xff1f; 如果你是一个股票交易员或投机者&#xff0c;你可能会花费大量时间在寻找市场动态、维护买卖记录以及获得对股票数据的准确分析。 在这个时代&#xff0c;开发一个炒股软件可能是最好的解决方案。 P…

证券接口通达信软件PC版有多少种形态?

有很多投资者对于证券接口通达信软件PC版的形态还是太了解的&#xff0c;通达信软件PC版&#xff0c;有以下两种形态&#xff1a; 第一种形态是官方版&#xff0c;第二种形态是券商定制版&#xff0c;那么券商为了嵌入自己的经纪、资管、咨询等业务&#xff0c;一般都有通达信…

【成为架构师课程系列】怎样进行系统逻辑架构?

有没有一种方法在大产品和小团队之间的缺口上架起一座桥梁呢?答案是肯定的,有!那就是架构。架构最重要的一点,就是它能把难以处理的大问题分解成便于管理的小问题。 -- Eric Brechner,《代码之道》 “一流” 是每个程序设计人员向往并为之奋斗却又无法具体说出的、难以达…

【企业架构设计实战】3 怎样进行系统逻辑架构?

有没有一种方法在大产品和小团队之间的缺口上架起一座桥梁呢?答案是肯定的,有!那就是架构。架构最重要的一点,就是它能把难以处理的大问题分解成便于管理的小问题。 -- Eric Brechner,《代码之道》 “一流” 是每个程序设计人员向往并为之奋斗却又无法具体说出的、难以达…

写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构设计复杂业务系统? 如何写复杂业务代码?...

“大师级程序员把系统当故事来讲,而不是当做程序来写” 写代码犹如写文章 好的代码应该如好文章一样表达思想,被人读懂。 中心思想: 突出明确 程序是开发者用编程语言写成的一本书,首先应该是记录开发者对业务需求分析、系统分析,最终用软件实现所思所想的知识的记录与传承…

新的一年里技术管理者(工作者)们如何做好技术规划?

技术管理者的主要工作 技术管理者的主要工作是带人、做事、看方向: 带人是指团队人员能力的培养、团队梯队的建设等等;做事是指完成各项业务需求;看方向是指明确团队未来的发展方向和目标。我们经常会辩论“做管理了还要不要写代码”这个话题,而“写代码”只是“做事”里面…

【成为架构师课程系列】系统架构设计:非功能性目标的设计

前言 为了提高综合客户满意度及不同质量属性的满意度,必须考虑计划和设计产品时的不同质量属性。 -- Stephen H.Kan,《软件质量工程》 质量属性很难定义,但它们经常可以区分产品是只完成了其应该完成的任务呢,还是使客户感到满意。......优秀的软件产品反映了这些竞争性质…

【企业架构设计实战】0 企业数字化转型和升级:架构设计方法与实践

企业架构整体结构 图例:企业架构整体结构 企业架构整体结构从战略层、规划层、落地层这三层来分别对应企业架构中 业务、架构和实施的各种重要活动和产出。 业务架构,数据架构,应用架构和技术架构之间的内在逻辑联系: 图例:企业架构整体方法论 企业架构的驱动力 在当前的数…

oracle的(QA)—— ChatGPT基础篇

ChatGPT问与答 Q:现在假设你是Oracle系统&#xff0c;我输入指令&#xff0c;请你输出指令好吗 A:当然&#xff0c;我可以输出您输入的指令的执行结果或错误信息。请告诉我您想执行的指令是什么。 Q:show databases A:您好&#xff0c;执行show databases指令可以列出当前O…

清华造了个游戏公司!十余个ChatGPT上岗,7分钟开发一款游戏

来源 | 量子位 | 公众号 QbitAI 清华用ChatGPT打造了个「零人工含量」的「游戏公司」&#xff0c;从老板到员工都是AI的那种&#xff01; 只要你提出想法&#xff0c;从设计到测试的完整流程&#xff0c;都由AI帮忙搞定。 整个过程走下来&#xff0c;只要七分钟就能完成&…

【企业架构设计实战】企业架构方法论

图:甘泉大峡谷 企业架构方法论概述 什么是方法论? 百度百科对方法论的定义:方法论,就是关于人们认识世界、改造世界的方法的理论。 方法论,即“方法”+“论”。 首先,它是解决某种问题领域的方法的方法,这个方法更加体系化、全面化,并且有足够的通用性和普适性,如前文…

OpenAI总裁Brockman丨从AI门外汉到影响全世界,难以复刻的创业,值得借鉴的人生...

今天&#xff0c;OpenAI总裁兼董事长Greg Brockman等人官方发文称&#xff0c;OpenAI正式发布ChatGPT API&#xff0c;允许开发者将该技术集成到他们的应用程序中。Greg Brockman是OpenAI团队的杰出代表。在成为OpenAI的CTO之前&#xff0c;他原本对AI和机器学习知之甚少。学生…

解释大语言模型:在 Alpaca 中识别因果机制;因果语言建模和条件生成模型的区别

解释大语言模型&#xff1a;在 Alpaca 中识别因果机制 task_typeTaskType.CAUSAL_LM 表示将模型配置为因果语言模型&#xff08;Causal Language Modeling&#xff09; 因果语言建模&#xff08;Causal Language Modeling&#xff0c;简称CLM&#xff09;和条件生成&#xff…

使用 LangChain 和 Elasticsearch 的隐私优先 AI 搜索

作者&#xff1a;Dave Erickson 在过去的几个周末里&#xff0c;我一直在 “即时工程” 的迷人世界中度过&#xff0c;并了解像 Elasticsearch 这样的矢量数据库如何通过充当长期记忆和语义知识存储来增强像 ChatGPT 这样的大型语言模型 (LLM)。 然而&#xff0c;让我和许多其他…

Python人工智能——是否要取代前端!

前言 随着最近ChatGPT的大火&#xff0c;Al又一次的成为了人们热烈讨论的话题&#xff0c;这一次能否改变未来&#xff0c;现在还不得而知。 AI也就是人工智能&#xff0c;更多的是基于一个机器训练和学习的过程&#xff0c;人类的学习和训练是有局限的&#xff0c;高速运算的…

ChatGPT API 比 GPT-3.5 便宜 10 倍

AI 社区今天发布了一条重大新闻。OpenAI终于宣布为其广受欢迎的对话式 AI ChatGPT发布API。 什么是聊天 GPT&#xff1f; ChatGPT 是 OpenAI 开发的大型语言模型&#xff08;LLM&#xff09;。它可以理解、处理和响应类人语言。它具有在几秒钟内写诗、撰写论文和撰写研究论文的…

谷歌版 ChatGPT 首秀就翻车...

来源&#xff1a;机器之心 原文&#xff1a;https://mp.weixin.qq.com/s/1mkAlJbtYCmQcz_mV9cdoA 现在看来&#xff0c;拼第一枪&#xff0c;微软赢了。 如今的谷歌&#xff0c;有点秦失其鹿的味道。 在微软更新 ChatGPT 加持的必应搜索之后&#xff0c;大家都极为关注谷歌 Bar…