1. WebSocket connection to 'ws://XXX:8083/' failed
解决思路:
- 先查一下你的订阅 url 是不是不对,一般情况下,订阅 websocket 的 url 后面需要加后缀
/mqtt,可以使用 MQTTX 这样的客户端进行连接查看,如下面的动图所示。可以看到如果 path 是/时连接失败,但是当修改 path 为/mqtt时他连接成功了。
-
如果 path 加了
/mqtt还是连接不上,需要去查看一下你们所使用的mqtt broker的配置,比如我们是使用 EMQX,那我们可以去云平台配置中查看,如下图所示。我们需要关注两个点:- ws/wss 协议有没有被启用 - 如果没被启用那我们肯定连接不上
- mqtt path 配置 - 我们连接的时候配置 path 就是要看这儿的值
2. WebSocket is closed before the connection is established.
解决思路:
- 如果在浏览器的控制台(console)中查看不到更具体的报错信息,而且前端使用的是 mqtt.js 库,我们可以在项目中添加以下代码,这样可以开启 mqtt.js 的 debug 模式,查看更详细的连接行为。
localStorage.setItem('debug', 'mqttjs*');
具体查看是打开浏览器的控制台(Console),然后筛选 Verbose, 这样就可以看到 websocket 连接的各阶段信息:
仔细看信息,下图蓝框部分显示我们其实已经连接成功了,但是看红框信息,连接又 'immediately' 断开了,由此推断应该是哪里调用了 disconnect/close 接口
最后发现代码里确实有一个地方调用了 mqtt.disconnect()(因为代码有一部分是 AI 写的,所以说对于 AI 写的代码我们还是需要好好审查的)
(未完待续)