mqtt.js | client.connected returns false 虽然客户端似乎已连接
mqtt.js | client.connected returns false though client seems to be connected
在玩弄 node.js 的 mqtt.js 时,我发现 client.connected 的值似乎是错误的,或者我误解了一些东西。
我完成了本教程 http://thejackalofjavascript.com/getting-started-mqtt/,一切正常。
我试图更多地了解 mqtt,所以我查看了 https://www.npmjs.com/package/mqtt#mqttclientconnected , client.connected 的描述:
Boolean : set to true if the client is connected. false otherwise.
为了看看它是否有效,我修改了第一行的源代码,就像这样
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。
但是为什么?
问题是 mqtt.connect()
调用是异步的。所以它 returns 在它实际连接之前。这意味着当您在调用 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
主题的消息时,它会打印出来然后退出。
在玩弄 node.js 的 mqtt.js 时,我发现 client.connected 的值似乎是错误的,或者我误解了一些东西。
我完成了本教程 http://thejackalofjavascript.com/getting-started-mqtt/,一切正常。
我试图更多地了解 mqtt,所以我查看了 https://www.npmjs.com/package/mqtt#mqttclientconnected , client.connected 的描述:
Boolean : set to true if the client is connected. false otherwise.
为了看看它是否有效,我修改了第一行的源代码,就像这样
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。
但是为什么?
问题是 mqtt.connect()
调用是异步的。所以它 returns 在它实际连接之前。这意味着当您在调用 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
主题的消息时,它会打印出来然后退出。