2016-11-14 36 views
0

而玩弄node.js的mqtt.js我发现client.connected的价值似乎是错误的或我误解了一些东西。
我做了这个教程http://thejackalofjavascript.com/getting-started-mqtt/,一切正常。

我试图让更多的进入MQTT,所以我抬头对https://www.npmjs.com/package/mqtt#mqttclientconnected的client.connected说明:mqtt.js | client.connected返回false虽然客户端似乎连接

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


为了看它是否正常工作,我修改了源代码的FIRSTLINE就这样

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(); 

我只是说如果 - 子句。执行脚本时,我总是收到消息,发现有问题,ergo:connected - > false。
但是为什么?

回答

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主题的消息时,将其打印出来然后退出。