使用Node.js的流不起作用

时间:2010-09-25 10:15:42

标签: http streaming node.js browser

我知道使用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.write()之后有res.end()才能将数据发送到浏览器。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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中插入的换行符作为curl将在输出到stdout之前等待换行符。