0

我正在从最新的 Ubuntu 运行 Node.js。我得到以下代码:

var http = require('http');

var s = http.createServer(function(req, res){
    res.writeHead(200, {'content-type':'text/html'});
    res.write('Hello ');

    setTimeout(function(){
        res.end('world');
    }, 3000);
});

s.listen(8000);

我通过执行“node server.js”来运行它,这一切都很好。但问题是,由于某种原因,在调用 setTimeout 之前没有输出任何内容——即请求后 3 秒。

我或多或少地遵循了http://www.youtube.com/watch?v=jo_B4LTHi3I上的示例(见 17:08),但我无法获得与他一样的“流式传输”结果(他的浏览器首先输出“Hello”,然后在 3 秒后输出“world”)。

我尝试了不同的浏览器,甚至尝试在终端中“卷曲”,就像他在剪辑上所做的那样。但这都是一样的。

默认情况下是否打开了某种输出缓冲,或者它为什么会这样?

提前致谢!

4

1 回答 1

1

这是因为浏览器仅在收到 res.end() 后才呈现页面,即 3 秒后。在视频通知中显示的实施情况下,该行显示为

res.write('Hello \n');

使用 curl,换行会导致 'hello' 输出到控制台,并在 3 秒的延迟后打印出 'world'。

在这两种情况下,即使用 res.write('Hello') 或 res.write('Hello \n'),浏览器仅在接收到 res.end() 后才会呈现它。此外,如果浏览器没有接收到 res.end(),响应将超时并且不会显示任何内容。

于 2012-05-11T17:15:59.247 回答