Ho iniziato a imparare API di streaming e ho trovato una delle buone documentazioni qui . C'è stato un confronto dato dall'autore per dimostrare l'efficacia dei flussi.
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
fs.readFile(__dirname + '/data.txt', function (err, data) {
res.end(data);
});
});
server.listen(8000);
Si dice che nell'esempio sopra, per ogni richiesta l'intero file verrebbe letto e memorizzato in memoria, il che potrebbe creare problemi per un numero elevato di connessioni simultanee. Sembra buono!
Ora, per la soluzione nel secondo esempio:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function (req, res) {
var stream = fs.createReadStream(__dirname + '/data.txt');
stream.pipe(res);
});
server.listen(8000);
ci viene detto che dal momento che res
è esso stesso è un flusso, quindi possiamo leggere il file tramite stream e convogliare il risultato in res che non creerebbe il problema di memoria.
Domanda
Il browser manterrà aperta la connessione utilizza l'intero file viene letto poiché secondo me il browser conosce HTTP
solo quindi come gestirà lo scenario di streaming. Inoltre, non ci vorrà più tempo per lo streaming del file rispetto all'invio di un intero file alla volta?