【问题标题】:mqtt.js | client.connected returns false though client seems to be connectedmqtt.js |尽管客户端似乎已连接,但 client.connected 返回 false
【发布时间】:2016-11-14 13:13:10
【问题描述】:

在玩弄 node.js 的 mqtt.js 时,我发现 client.connected 的值似乎是错误的,或者我误解了某些东西。
我完成了本教程http://thejackalofjavascript.com/getting-started-mqtt/,一切正常。

我试图更多地了解 mqtt,所以我查看了https://www.npmjs.com/package/mqtt#mqttclientconnected,client.connected 的描述:

Boolean :如果客户端已连接,则设置为 true。否则为假。


为了看看它是否有效,我像这样修改了第一行的源代码

var mqtt = require('mqtt')

client = mqtt.connect('mqtt://localhost');

  if (client.connected == true) {
        console.log("Connection successful.")
    }
    else{
        console.log("Something went wrong.")
    }

client.subscribe('presence');

console.log('Client publishing.. ');
client.publish('presence', 'Client 1 is alive.. Test Ping! ' + Date());

client.end();

我刚刚添加了 if 子句。执行脚本时,我总是收到消息,说出错了,ergo: connected --> false。
但为什么呢?

【问题讨论】:

    标签: javascript node.js mqtt iot


    【解决方案1】:

    问题在于mqtt.connect() 调用是异步的。所以它在实际连接之前返回。这意味着当您在调用mqtt.connect() 之后直接测试mqtt.connected 时,它仍然会是假的,因为它实际上还没有完成连接。

    您需要注册事件处理程序,以便在客户端实际连接时得到通知。

    var mqtt = require('mqtt')
    
    var client = mqtt.connect('mqtt://localhost');
    
    client.on('connected',function(){
      client.subscribe('presence');
      console.log('Client publishing.. ');
      client.publish('presence', 'Client 1 is alive.. Test Ping! ' + Date());
    });
    
    client.on('message',function(topic,message){
      console.log("received message on " + topic);
      console.log(message.toString());
      client.end();
    });
    

    此代码连接到代理,订阅主题presence,然后向同一主题发布消息。当它收到关于presence 主题的消息时,它会将其打印出来然后退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2013-08-25
      • 2021-05-23
      • 2020-07-25
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多