如何检查客户端是否已连接?
从Device类示例中,我了解到Device是mqtt.Client()
返回的实例
mqtt.js
有一个连接旗帜https://github.com/mqttjs/MQTT.js#connected
然而,device.connected
给了我undefined
我找到了获取当前状态的技巧要监视该状态之后,您应该使用先前答案中建议的设备连接主题如果您启用了Fleet索引设置,请确保启用“Thing Connectivity”:在您的Thing中包含事物连接数据指数。
然后,您可以运行搜索(针对特定事物或一组事物)并获取每个事物的连接状态:
` AWS = require('aws-sdk');
var iot = new this.AWS.Iot({
accessKeyId: this.AccessKeyId,
secretAccessKey: this.SecretAccessKey,
//endpoint: this.host,
maxResults: 500,
region: this.regionData
});
var params = {
queryString: 'shadow.reported.isConnected.connected = *',
indexName: 'AWS_Things',
nextToken: nexttoken
};
iot.searchIndex(params, function(err, data)
for (const robot of data.things[0])
connectivity = robot.connectivity.connected;`
注意 - 上面的代码不是一个有效的例子,只是为了显示原则Note2 - 记住搜索结果出现在页面中并且需要以这种方式处理
因为它不在那里。
DeviceClient {
publish: [Function],
subscribe: [Function],
unsubscribe: [Function],
end: [Function],
handleMessage: [Function: bound ],
updateWebSocketCredentials: [Function],
getWebsocketHeaders: [Function],
updateCustomAuthHeaders: [Function],
simulateNetworkFailure: [Function],
_events:
{ connect: [Function],
close: [Function],
reconnect: [Function],
offline: [Function],
error: [Function],
message: [Function] },
_eventsCount: 6 }
虽然您可以收听“连接”事件并自行添加“已连接”属性,如下所示
device.on('connect', function() {
device.connected = true;
});
再次检查DeviceClient,现在就可以了。
DeviceClient {
publish: [Function],
subscribe: [Function],
unsubscribe: [Function],
end: [Function],
handleMessage: [Function: bound ],
updateWebSocketCredentials: [Function],
getWebsocketHeaders: [Function],
updateCustomAuthHeaders: [Function],
simulateNetworkFailure: [Function],
_events:
{ connect: [Function],
close: [Function],
reconnect: [Function],
offline: [Function],
error: [Function],
message: [Function] },
_eventsCount: 6,
connected: true }
在IoT规则引擎中创建规则并监听生命周期事件。设备连接主题将在连接IoT设备时收到消息。
https://docs.aws.amazon.com/iot/latest/developerguide/life-cycle-events.html