我遇到了同样的问题,并找到了解决方案。我不是 Node.js 专家,所以这只是一个反复试验的例子。也许其他人可以详细说明真正的问题。
这个连接字符串对我有用:var client = mqtt.connect(MQTT_ADDR,{clientId: 'bgtestnodejs', protocolId: 'MQIsdp', protocolVersion: 3, connectTimeout:1000, debug:true});
完整示例如下:
var mqtt = require('mqtt');
var MQTT_TOPIC = "hello";
var MQTT_ADDR = "mqtt://192.168.0.105";
var MQTT_PORT = 1883;
/* This is not working as expected */
//var client = mqtt.connect({host: MQTT_ADDR, port:MQTT_PORT},{clientId: 'bgtestnodejs'});
/* This works... */
var client = mqtt.connect(MQTT_ADDR,{clientId: 'bgtestnodejs', protocolId: 'MQIsdp', protocolVersion: 3, connectTimeout:1000, debug:true});
client.on('connect', function () {
client.subscribe(MQTT_TOPIC);
client.publish(MQTT_TOPIC, 'Hello mqtt');
});
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
client.on('error', function(){
console.log("ERROR")
client.end()
})
Mosquitto 似乎要求 protocolId 和 protocolVersion 设置如上。
此外,请注意,主机和端口不包含在选项中,而是作为第一个参数给出。
如果我正确地阅读了文档,则主机和端口参数不应作为选项的一部分给出,而应作为选项之前的“服务器”选项给出。看到这个link。我无法从该链接获取语法来工作,但上面的代码行似乎是窍门。