2010-09-25 6 views
0

Je sais qu'avec Node.js vous pouvez diffuser des données.Flux avec Node.js ne fonctionne pas

Mais pourquoi pas ce travail de code:

var sys = require('sys'), 
http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write("hello"); 
    res.write("world"); 
}).listen(80); 

Il semble que je dois avoir res.end() après la dernière res.write() pour être en mesure d'envoyer les données au navigateur.

Répondre

1

En fait, il semble plutôt que la sortie doit avoir une certaine taille avant que le navigateur ne le rende. Probablement le tampon à la fin du navigateur. Lorsque vous envoyez res.end() le navigateur vide ce tampon et restitue tout ce qui est dans le tampon immédiatement. Cependant, si aucun res.end() n'est envoyé, le navigateur attend jusqu'à ce que son tampon soit rempli.

J'ai essayé d'expérimenter le bloc de code suivant avec Firefox et curl.

var sys = require('sys'), 
http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.write("hello\n"); 
    for (var i = 0; i < 100; i++) { 
     setTimeout(function() { 
     res.write("world lotsa text here lotsa text\n"); 
     }, 400*i); 
    } 
}).listen(3000); 

Vous pouvez essayer vous-même en vous dirigeant vers http://localhost:3000/ après nœud en cours d'exécution avec le code ci-dessus. J'ai alors essayé la même chose avec curl, et chaque ligne est apparue immédiatement comme elle a été envoyée par le serveur.

La commande curl j'était simplement:

curl http://localhost:3000/ 

Notez les sauts de ligne I inséré dans le res.write comme boucle attendront les sauts de ligne avant la sortie à stdout.

2

Je pense que le morceau doit avoir une certaine taille avant d'être envoyé.

Questions connexes