nodejs没有在超时mqtt中发布所有消息

时间:2018-09-07 09:50:33

标签: javascript node.js mqtt

我正在测试mqtt broker。我有1000个客户。这1000个客户端在2秒内发布了一条消息,这意味着在2秒内将发布1000条消息。但是当我使用setInterval时,不会发布1000条消息。几乎有一半的消息将被发布,而当我发布时没有setInterval时,所有消息都会被传递。

这是由于我的nodejs代码引起的,但是我无法理解到底发生了什么。我正在使用emqtt经纪人。

这是我的代码:

publish.js

var mqtt = require('mqtt')
var client = [];
for (let index = 0; index < 1000; index++) {
 client[index] = mqtt.connect('mqtt://localhost:1883',{qos:2})  
}

setInterval(function () {
    for (let index = 0; index < 1000; index++) {
        var payload = JSON.stringify({
          id:index,
          timestamp:Date.now()
        });
        client[index].publish("drivers", payload,{qos:2},function(err){
          if(err){
            console.log("There is an error in publishing ",err);
          }
        });
    }
}, 2000)

Subscriber.js

var client2 = mqtt.connect('mqtt://localhost:1883',{qos:2});
var fs = require('fs');
client2.subscribe("drivers", {
    qos: 2
});
client2.on("message", function (topic, payload) {
        payload = JSON.parse(payload.toString());
        fs.appendFile('drivers', payload.id+"\n", function (err) {
            if (err) throw err;
            console.log('Saved!');
          });
})

这段代码是怎么回事?

谢谢

0 个答案:

没有答案