我有以下代码每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()
后,它按预期工作。
答案 0 :(得分:1)
在client.on('message')
中,您需要删除client.end()
,因为mqtt在收到第一条消息时已完成。
答案 1 :(得分:0)
我认为 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);