2016-08-22 63 views
1

我想設置readstream.write之間的超時,但我不斷收到錯誤:結束後寫入。如何在res.write之間設置超時。謝謝。這是我的代碼。nodejs設置數據響應超時

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讀取速度很快,因此無法創建視頻。任何幫助將不勝感激。

+0

是不是因爲在200ms之前結束呼叫? –

+0

也許你可以將它們推入一個隊列中,在兩次執行之間設置一個最小間隔?我在這裏沒有真正理解這一點。 –

+0

如何在響應中添加延遲以使其正常工作? – Matt

回答

0

我寫了一些我知道你需要的代碼。 StackOverflow是不是我最喜歡的IDE,所以不要太努力吧^^ 我不是很瞭解readStream,但是data事件被稱爲很多時候寫入? 隊列正在等待先行塊,並且其超時正確完成。 是你需要的嗎?

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', {}); 
    }); 
}); 
+0

應該調用'jobs.create('write end')'readStream.on(「end」'? – Matt

+0

Oohhh yep,我的壞。 –