Node.js中从mqtts切换为wss协议连接MQTT Broker失败问题
问题:WSS协议连接MQTT Broker时遭遇连接拒绝
我能通过以下代码成功使用MQTTS协议连接MQTT Broker:
mqtt = require('mqtt') let options = { host: '0d9d5087c5b3492ea3d302aae8e5fd90.s2.eu.hivemq.cloud', port: 8883, path: '/mqtt', clientId: 'mqttx_2d803d2743', protocol: 'mqtts', username: 'light29', password: 'Mqtt29@!', cleanSession: true, } // 初始化MQTT客户端 let client = mqtt.connect(options); // 设置回调函数 client.on('connect', function () { console.log('Connected'); }); client.on('error', function (error) { console.log(error); }); client.on('message', function (topic, message) { // 收到消息时触发 console.log('Received message:', topic, message.toString()); }); // 订阅主题'mytest' client.subscribe('mytest'); // 向主题'mytest'发布消息'Hello' client.publish('mytest', 'Hello');
运行结果符合预期:
Connected Received message: mytest Hello
尝试改用WSS协议连接同一Broker,修改配置如下:
let options = { host: '0d9d5087c5b3492ea3d302aae8e5fd90.s2.eu.hivemq.cloud', port: 8884, path: '/mqtt', clientId: 'mqttx_2d803d2743', protocol: 'wss', username: 'light29', password: 'Mqtt29@!', cleanSession: true, }
但此时出现连接拒绝错误:
Error: connect ECONNREFUSED 127.0.0.1:8884 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1161:16) { errno: -61, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 8884 }
解决方案
检查Broker的WSS端口状态
确认你的HiveMQ Cloud Broker是否开启了WSS服务,且端口8884是否对外开放。部分MQTT服务提供商可能需要在控制台手动启用WSS端口。修正连接参数的写法
使用WSS协议时,建议直接通过完整URL的方式初始化连接,避免单独配置host、port、path可能导致的解析问题:const url = 'wss://0d9d5087c5b3492ea3d302aae8e5fd90.s2.eu.hivemq.cloud:8884/mqtt'; let options = { clientId: 'mqttx_2d803d2743', username: 'light29', password: 'Mqtt29@!', cleanSession: true, } let client = mqtt.connect(url, options);确认网络环境
检查本地网络是否能访问Broker的8884端口,可以用telnet或nc命令测试连通性:nc -zv 0d9d5087c5b3492ea3d302aae8e5fd90.s2.eu.hivemq.cloud 8884如果测试失败,可能是防火墙或代理阻止了该端口的访问。
内容的提问来源于stack exchange,提问作者floflo29
相关产品推荐
相关产品推荐

