node-js-setinterval在connect上无法与mqtt客户端一起工作



我有以下代码要每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);

最新更新