问题
前端在浏览器端调用mq,后端提供了连接 mq 的 ip 与端口,前端正确设置但是连接失败
this.client = mqtt.connect(mqtt://ip:端口/mqtt)
原因
后端提供的 ip 与端口是 mqtt 协议的,前端使用 mqtt.js 库有协议转换,mqtt.js 库会自动将 mqtt 协议转换为 ws 协议来通过 WebSocket 连接 MQTT 服务器。这是客户端库为了兼容 Web 环境而做的处理,因为浏览器直接不支持 mqtt 协议,而是通过 WebSocket 来实现。
解决
跟后端协商,端口更改为了 8083,EMQX默认使用 8083 和 8084 分别作为非加密和加密的WebSocket端口
this.client = mqtt.connect(ws://ip:8083/mqtt)