1

こんな特急が…

app.get('/:grp/:time', function(req, res){
  var out = [];
  var grp = grpmap[req.param('grp')];
  var time = timemap[req.param('time')];
  leveldb.createReadStream({start:'HEM!' + grp + '!' + time + '!', end:'HEM!' + grp + '!' + time + '!\xff', keys: false})
    .on('data',function(data){
      out.push(JSON.parse(data));
    })
    .on('close',function(){
      res.send(out);
    })
});

期待どおりに動作しますが、データが入力されるまでに時間がかかり、クライアントは応答を受信するまで数秒間待機します。もっと良い方法があるはずです..ヒントはありますか?

ありがとう。

4

1 に答える 1

0

何かを送信する前に結果セット全体をバッファリングしているため、これには長い時間がかかります。

やりたいことは、バッファリングではなくデータをストリーミングすることです。次のようなJSONStreamのようなモジュールを使用する必要があります。

var JSONStream = require('JSONStream')

app.get('/route', function (req, res) {
  db.createReadStream({...}).pipe(JSONStream.stringify()).pipe(res);
})

リクエスト全体にかかる時間は同じかもしれませんが、データの受信をすぐに開始する必要があります。これは、すべての結果がバッファリングされるまで待たずに何かを送信するためです。

于 2014-12-25T18:58:04.200 に答える