2017-05-31 10 views
0

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(); 
    }); 
}); 

上記のノードプログラムは、実行されるたびに異なる順序で出力されます。

答えて

1

トランスポートとしてUDPを使用することはできません。 RFC7252あたりとして

:CoAPはUDPのような信頼性の低いトランスポートにバインドされたよう

、CoAPメッセージが 順不同で到着するかもしれない、重複、または 予告なしに行方不明に見えます。このため、CoAPは、TCPのようなトランスポート の全機能セットを再作成せずに、軽量の信頼性を実現します。 メカニズム。確認可能なメッセージのための指数 バックオフと

  • シンプルなストップアンドウェイト再送信頼性:それは、次のような特徴があります。

  • 確認可能なメッセージと確認不能なメッセージの重複検出 メッセージ。

https://tools.ietf.org/html/rfc7252

あり、異なる実装でCoAPオーバーHTTPを作るためにいくつかの努力はしているが、それはCoAPのRFC自体に属していません。

あなたが絶対にCoAPを使用する場合は、この方法で掘り下げてみてください。

+0

HTTPではなくTCP上のCoAPを意味しますか? – rynop

+0

はい。私が使用している実装(Californium、java)では、CoAP-over-TCPが現在進行中です。私は他の実装でこれについて知りません。残念なことに、まだそのためのRFCドラフトしかありません。 –

関連する問題