背景:使用mpvue搭建微信小程序项目,利用mqtt进行物联网。
之前利用mpvue已经能连上阿里云的物联网平台进行通讯,但是我又搭建了EMQX在自己服务器上,想用自己的服务器进行通讯。首先先用页面写了个小demo,先进行测试,可以连接,然后我就转入微信小程序测试连接。结果很诡异,只要一点击连接,就不停地报 closeSocket:fail WebSocket is not connected。经过各种排查,终于查出问题。直接上代码:
this.url = 'wx://your.url:6666/mqtt'
this.options = {
connectTimeout: 4000, //超时时间
clientId: 'C_clientcc', //随机生成ID
username: '', //用户名
password: '', //密码
}
var client = mqtt.connect(this.url, this.options)
问题就在连接的url上,当然clientId用重复也会有问题,这里就不多说了。首先:如果使用的mqtt包连接,那么就要使用wx:(mqtt作者已经做过了二次封装).第二:url这里,如果勾选了不检验域名,可以使用IP地址或者域名,后面要跟上EMQX端口号,最后!要有/mqtt结尾!这里是大坑,我在页面写的demo测试连接的时候,是不需要带上的,我但是微信小程序用的mqtt要带上,查了各种资料才解决这个问题。最后提示:如果该端口没有SSL,那么用wx:,否则就要用wxs: 当然,正常上线的话,是要求检验域名的,即需要wxs: ,那么就要自己去服务器配置了。
页面使用的是这个:
https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.js