node-coapを使用してIoTデバイスからCoAP経由でセンサデータを送信しようとしています。 CoAPサーバーに到着するデータの順序は重要です。私は、たとえconfirmable
リクエストオプションを使用していても、データのシーケンスを保存する方法を見つけることができません。データオーダーの保存が必要な場合はCoAPを使用できますか?
私は以下の小さなプログラムを持っています。
データの順序/順序が重要な場合はCoAPを使用できませんか?それができれば、私は何が間違っているのですか?
'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();
});
});
上記のノードプログラムは、実行されるたびに異なる順序で出力されます。
HTTPではなくTCP上のCoAPを意味しますか? – rynop
はい。私が使用している実装(Californium、java)では、CoAP-over-TCPが現在進行中です。私は他の実装でこれについて知りません。残念なことに、まだそのためのRFCドラフトしかありません。 –