2016-11-14 63 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主題的消息時,將其打印出來然後退出。