微信小程序使用MQTT.JS中遇到的问题

一、需求:最近一个物联网项目,需要通过手机端微信小程序发布控制指令到设备,微信小程序端可以接收设备端的数据,于是用到了EMQX,通过MQTT.JS连接EMQX平台。

二、实现过程:

1、购买阿里云服务器;

2、购买域名,并进行域名备案;

3、阿里云服务器上Windows平台搭建EMQX服务器,参考链接Windows服务器上Mqtt服务器EMQX的安装使用_51CTO博客_windows mqtt服务器

4、微信小程序中引入MQTT.JS,MQTT版本库mqtt - Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developers

5、阿里云服务器上Windows平台搭建Nginx服务器;

6、Nginx配置SSL证书、反向代理、配置为自启动服务(Windows 下将 Nginx 设置成服务 - Code-Rain - 博客园),SSL证书配置参考EMQX MQTT 服务配置 WSS 证书 - Nginx - 大象笔记Nginx配置ssl证书(https)_喜枝儿的博客-CSDN博客_nginx 配置ssl

三、过程中遇到的问题:

1、问题1:由于跟设备之间进行通信,统一通信格式为十六进制字节数组格式,MQTT.JS需要支持发布字节数组格式,原有代码里面只支持发布字符串格式;

2、问题2:在通过MQTT.JS连接EMQX服务器的时候,存在微信开发工具模拟器能够正常连接使用,并且能够发布与接收消息,但是安卓真机无法进行连接的情况(存在两种情况会造成此问题);

四、问题解决思路

1、问题1解决思路

开始出现这个问题,网络上更多的是更换MQTT.JS版本,尝试了多个版本的更换后,发现报的错误也不一样,最后确定一个版本,进行单步调试,发现有两处代码需要调整,具体代码调整如下,修改后可以支持发送十六进制字节数组。

 

2、问题2解决思路

 出现模拟器可以正常连接、发布与接收消息,实际存在两种情况。

(1)MQTT.JS的版本问题,通过更新最新的版本或者其中一些稳定的版本可以解决,模拟器调试的时候存在sec-websocket-protocol:mqtt,而真机上不存在的时候,这个可以通过更新MQTT.JS进行解决。

  (2)安卓真机必须使用TLS/433端口,在用模拟器和IOS的时候是正常的,但是用安卓的时候必须使用TLS/433端口,不能在连接地址处带端口

由于安卓真机在连接EMQ的时候,连接地址不能带端口,因此我们需要利用Nginx将wss://域名/mqtt映射到我们实际的8083或者8084端口上进行使用。

 

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值