J'essaie de transmettre des données de capteur à partir d'un appareil IoT via CoAP en utilisant node-coap. L'ordre des données, tel qu'il arrive au serveur CoAP, est important pour moi. Je ne peux pas trouver un moyen de préserver la séquence de données, même en utilisant l'option de demande confirmable
.CoAP peut-il être utilisé lorsque la conservation des données est requise?
J'ai un petit programme ci-dessous qui montre ce que je veux dire.
Est-ce que CoAP ne peut pas être utilisé si l'ordre/la séquence de données est important? Si c'est possible, qu'est-ce que je fais de mal?
'use strict';
const coap = require('coap'),
cbor = require('cbor'),
server = coap.createServer();
const sequentialData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let incomingData = [];
let numResponses = sequentialData.length;
server.on('request', (req, res) => {
const obj = cbor.decodeFirstSync(req.payload);
incomingData.push(obj.data);
res.end();
});
server.listen(() => {
const reqOpts = {
hostname: 'localhost',
method: 'POST',
pathname: '/sequential',
options: {
Accept: 'application/cbor'
}
};
sequentialData.forEach((item) => {
const req = coap.request(reqOpts);
req.write(cbor.encode({
data: item
}));
req
.on('response', (res) => {
res.pipe(process.stdout);
res.on('end',() => {
if (--numResponses === 0) {
console.log(`got data in this order`, incomingData);
process.exit();
}
})
});
req.end();
});
});
programme noeud ci-dessus émet un ordre différent à chaque fois couru.
Vous voulez dire CoAP sur TCP non HTTP? – rynop
Oui. Dans une implémentation utilisée par moi (Californium, java), CoAP-over-TCP est actuellement en cours. Je ne sais pas à ce sujet dans d'autres implémentations. Malheureusement, il n'y a encore qu'un projet de RFC pour cela. –