【问题标题】:nodejs set timeout on data responsenodejs在数据响应上设置超时
【发布时间】:2016-08-22 09:01:44
【问题描述】:

我正在尝试在 readstream.write 之间设置超时,但我不断收到错误:结束后写入。如何在 res.write 之间设置超时。谢谢你。这是我的代码。

app.get('/video', function (req, res) {


  var readStream = fs.createReadStream('video.mjpeg');
  res.writeHead(200, {'Content-Type': 'multipart/x-mixed-  replace;boundary=ThisString'});

  readStream.on("data", (chunk) => {
    res.write(chunk, 'binary');

    setTimeout(function () {
      res.write('ThisString');
    }, 200);
    console.log("Writing to client");
  });

  readStream.on("end", () => {
    readStream.destroy();
    res.end();
    console.log("End of data"); 
  });
});

我正在尝试在客户端显示视频,问题是 mjpeg 被快速读取,因此无法创建视频。任何帮助将不胜感激。

【问题讨论】:

  • 是不是因为200ms前调用结束?
  • 也许您可以将它们推送到一个队列中,该队列设置两次执行之间的最小间隔?我真的不明白这里的意思。
  • 如何在响应中添加延迟才能使其正常工作?

标签: node.js file response mjpeg


【解决方案1】:

我很快写了几行我理解你需要的代码。 StackOverflow 不是我最喜欢的 IDE,所以不要太用力 ^^ 我真的不知道 readStream 但data 事件被多次调用 write 吗? 队列正在等待前面的块,并且它的超时已正确完成。 是你需要的吗?

var kue = require('kue'),
    jobs = kue.createQueue();

app.get('/video', function (req, res) {

  var readStream = fs.createReadStream('video.mjpeg');
  res.writeHead(200, {'Content-Type': 'multipart/x-mixed-  replace;boundary=ThisString'});

  jobs.process('write chunck', function (job, done) {
    setTimeout(function() {
      res.write(job.chunck, 'binary');
      done && done();
    }, 200);
  });

  jobs.process('write end', function(job, done) {
    readStream.destroy();
    res.end();
    console.log("End of data");
    done & done();
  });

  readStream.on("data", (chunk) => {
    jobs.create('write chunck', {
      chunk: chunk
    });
  });

  readStream.on("end", () => {
    jobs.create('write end', {});
  });
});

【讨论】:

  • 应该为readStream.on("end" 调用jobs.create('write end') 吗?
  • 哦,是的,我的错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2021-12-02
相关资源
最近更新 更多