本文详细解析mqtt.js在使用WebSocket协议连接时遇到的'WebSocket connection failed'错误。通过核对协议类型(ws/wss)、BasePath路径及端口号配置,定位常见配置失误。提供基于EMQX公共服务器的正确连接代码示例,帮助开发者快速修复连接问题,实现稳定通信。
排查步骤如下:
- 首先确认页面使用的是
http还是https协议,并核对客户端连接时选用的是mqtt/mqtts协议,还是ws/wss协议。 - 其次检查连接地址是否正确,尤其是
BasePath部分。例如,原本正确的地址应为ws://xxxxx/mqtt(其中BasePath设置为mqtt),但实际连接时却错误地使用了ws://xxxxx。若某些场景下BasePath为mqtt/ws,则连接地址应调整为ws://xxxxx/mqtt/ws。 - 特别注意端口号配置,我所使用的mqtt服务中,
ws和mqtt端口号不一样。
若上述检查均无误,则可能面临与我当前情况相同的问题:尝试使用mqtt://xxxxx/mqtt始终无法建立连接,并收到WebSocket connection to 'ws://xxxxx' failed:的错误提示。
来看看小编挑选的这款手机你是否感兴趣:
解决方案:
直接使用ws://xxxxx/mqtt即可,记得切换对应的端口号,其他配置保持不变,仅修正连接地址。
const connectUrl = `ws://xxxxx/mqtt`; // 用这个就好了
// const connectUrl = `mqtt://xxxxx/mqtt`; // 用这个报错了,用上面的就好了
const clientId = `mqtt_${Math.random().toString(16).slice(3)}`;
var client = mqtt.connect(connectUrl, {
clientId,
clean: true,
connectTimeout: 4000,
username: 'username',
password: '123456',
reconnectPeriod: 1000,
})
const topic = '/nodejs/mqtt'
client.on('connect', () => {
console.log('Connected')
client.subscribe([topic], () => {
console.log(`Subscribe to topic '${topic}'`)
})
})如果不确定自身配置是否正确,可以使用以下地址进行测试。
使用EMQX 提供的 免费公共 MQTT 服务器,该服务基于 EMQX 的 MQTT 物联网云平台 创建。
Broker: broker.emqx.io TCP Port: 1883 Websocket Port: 8083
const connectUrl = `ws://broker.emqx.io:8083/mqtt`;
client = mqtt.connect(connectUrl, {
clean: true,
connectTimeout: 4000,
reconnectPeriod: 1000,
clientId: 'emqx_test',
username: 'emqx_test',
password: 'emqx_test'
})
// 需要订阅的主题
const topic = 'test';
//成功连接后触发的回调
client.on('connect', () => {
console.log('已经连接成功');
// 这里可以订阅多个主题
client.subscribe([topic], () => {
console.log(`订阅了主题 ${topic}`)
})
});
// 当客户端收到一个发布过来的消息时触发回调
client.on('message', function (message) {
// 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
// let data = JSON.parse(message.toString());
console.log("返回的数据:", message)
});
// 连接断开后触发的回调
client.on("close", function () {
console.log("已断开连接")
});
结果

到此这篇关于mqtt.js 无法连接/错误提示 WebSocket connection to ‘ws://xxxxx‘ failed:的文章就介绍到这了,更多相关mqtt.js 无法连接内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!