0

我并不是从设备双胞胎和天蓝色开始,而是更接近新手而不是专家。我无法弄清楚如何正确管理 azure 设备孪生的连接问题。

我有一个长时间运行的节点应用程序,可以打开一个客户端。我发现几天或几周后,它可能开始无法与支持的设备孪生进行通信。我不确定如何管理这个或更具体地说,捕获问题并重新连接。

这是代码:

client.getTwin(function(err, twin) {
 if (err) {
     console.error('could not get twin');
 } else {
     console.log('retrieved device twin');       
     twin.on('properties.desired', function(desiredChange) {
        console.log('Do something');
     }
}

}

有 twin.error 方法吗?

部分问题是我似乎无法理解/找到有关这些方法的正确文档。

4

1 回答 1

0

似乎有一个已知的错误。然而,这段代码真的帮助了我:

这是下面的链接和代码: https ://github.com/Azure/azure-iot-sdk-node/issues/28

'use strict'

var token = "...";
var Client = require('azure-iot-device').Client;
var DeviceProtocol = require('azure-iot-device-mqtt').MqttWs; // Default transport for Receiver
var client = Client.fromSharedAccessSignature(token, DeviceProtocol);
var isDissconnected = true;

client.on('disconnect', function () {
    isDissconnected = true;
    console.log('Disconnected');
    client.close(function () {
        console.log('Closed');
    });
});
client.on('connected', function () {
    console.log('Connected');
});
client.on('error', function (err) {
    console.error('ERROR: ' + err.message);
});

var connectClient = function () {
    console.log('Connecting client');
    client.open(function (err, transport) {
        if (err) {
            console.log('Could not connect: ' + err);
        }
        else {
            isDissconnected = false;
            client.getTwin(function (err, twin) {
                if (err) {
                    console.log('Could not get twin: ' + err);
                }
                else {
                    console.log('Got twin');
                }
            });
        }
    });
}
connectClient();
setInterval(function () {
    if (isDissconnected) {
        console.log("Retrying to connect...");
        connectClient();
    }
}, 10000);
于 2018-04-16T12:15:11.620 回答