2016-08-22 2 views
1

Ich versuche, ein Timeout zwischen readstream.write zu setzen, aber ich bekomme immer Fehler: Schreiben nach dem Ende. Wie kann ich ein Timeout zwischen res.write setzen. Vielen Dank. Hier ist mein Code.nodejs Zeitüberschreitung bei Datenantwort einstellen

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

Ich versuche, das Video auf der Client-Seite angezeigt wird, ist das Problem, dass der mjpeg schnell so gelesen wird das Video nicht erstellen kann. Jede Hilfe wird geschätzt.

+0

Ist es, weil das Ende Anruf vor den 200ms ist? –

+0

Vielleicht können Sie sie in eine Warteschlange schieben, die ein minimales Intervall zwischen zwei Ausführungen festlegen? Ich verstehe das hier nicht wirklich. –

+0

Wie fügt man der Antwort eine Verzögerung hinzu, damit sie funktioniert? – Matt

Antwort

0

Ich schrieb schnell eine Reihe von Code von dem, was ich verstehe, dass Sie brauchen. StackOverflow ist nicht meine Lieblings-IDE, also nicht zu hart darauf sein ^^ Ich weiß nicht wirklich die readStream, aber data Ereignis heißt viele Zeit schreiben? Die Warteschlange wartet auf den Präzedenzblock und die Zeitüberschreitung ist korrekt beendet. Ist es das, was Sie brauchen?

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

Sollte das 'Jobs.create ('write end')' für 'readStream.on (" end "'? – Matt

+0

Oohhh yep, mein Schlechter. –

Verwandte Themen