Node.js 节点js setinterval在connect上不与mqtt客户端一起工作

Node.js 节点js setinterval在connect上不与mqtt客户端一起工作,node.js,setinterval,mqtt,Node.js,Setinterval,Mqtt,我有以下代码要每3秒发布到MQTT代理,但它不起作用: 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() {

我有以下代码要每3秒发布到
MQTT代理
,但它不起作用:

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
published
date
消息

如果我删除
setInterval
函数并改用
client.publish(…)
,它只发布一次并退出

更新


在删除
client.end()
后,它将按预期工作。

client.on('message')
中,您需要删除
client.end()
,因为mqtt在收到第一条消息时已完成。

我认为Settawat Janpuk answer就是您要寻找的答案

但是,您也可以使用一个模块,使您以声明方式每隔x毫秒在mqtt上发布一次:

const mqttNow=require('mqtt-now');
常量选项={
主机:“localhost”,
间隔时间:500,,
行动:[
{
主题:"公众",,
信息:“messaggio”
},
{
主题:"随机",,
消息:()=>('random'+Math.random())
}
]
}
mqttNow.publish(选项);