我有以下代码要每3秒发布到MQTT broker
,但它不起作用:
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://test.mosquitto.org');
var topic = 'test-topic';
client.on('connect', function () {
client.subscribe(topic);
setInterval(function() {
client.publish(topic, Date.now().toString());
console.log('hello');
}, 3000);
});
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
我可以看到每3秒打印一次hello
消息,但看不到我的mqtt
发布的date
消息。
如果我删除setInterval
函数并使用client.publish(...)
,它只发布一次并退出。
更新
在移除client.end()
之后,它按预期工作。
在client.on('message')
中,您需要删除client.end()
,因为mqtt在收到第一条消息时已完成。
我认为Settawat Janpuk的答案就是您正在寻找的答案。
然而,您也可以使用一个模块,使您以声明的方式每隔x毫秒在mqtt上发布一次:
const mqttNow = require('mqtt-now');
const options = {
host: 'localhost',
interval: 500,
actions: [
{
topic: 'public',
message: 'messaggio'
},
{
topic: 'random',
message: () => ( 'random ' + Math.random() )
}
]
}
mqttNow.publish(options);