2010-09-25 80 views
0

我知道使用Node.js可以流式传输数据。Node.js流不起作用

但是,为什么没有这个代码工作:

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

看来,我必须有res.end()最后res.write()后,能够将数据发送到浏览器。

回答

1

实际上,它似乎更像是在浏览器呈现它之前输出必须是特定的大小。可能是浏览器端的缓冲区。当您发送res.end()时,浏览器会刷新此缓冲区并直接呈现缓冲区中的所有内容。但是,如果没有发送res.end(),浏览器将等待直到其缓冲区被填充。

我试着用Firefox和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); 

您可以通过上面的代码运行的节点之后前往http://localhost:3000/自己尝试一下。

然后我用curl试了同样的东西,每一行都从服务器发送出来。

我使用curl命令很干脆:

curl http://localhost:3000/ 

注意我在res.write为卷曲插入新行会等待新行输出到标准输出之前。

2

我认为块在发送前必须是一定的大小。