node.js - 我无法从服务器重现渐进式响应

Ale*_*ani 6 javascript webserver node.js

好,

我是node.js的新手.开始尝试,我正在关注Ryan Dahl(http://www.youtube.com/watch?v=jo_B4LTHi3I)的介绍,此时(大约0:17:00)有一个关于如何服务器的解释处理回应,

基本的例子是从webserver获得一个'hello'输出,然后在2秒之后出现'world',这段代码应该这样做

//Require the webserver library 
var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(200, { 'content-type' : 'text-plain' });
    res.write('Hello\n');

    //Asynchronous behavior
    setTimeout(function() {
        res.end('World\n');
    }, 2000);
});

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

所以我运行它,我得到了Hello World,但是只有一个来自服务器的响应有完整的结果,即请求> 2秒>'Hello World'.而不是请求> Hello> 2秒>世界.

为什么?,我该如何改变这种行为?

我正在使用v0.8.18,curl -i http://localhost:3000返回正确的标题... HTTP/1.1 200 OK content-type: text-plain Date: Sat, 26 Jan 2013 18:10:05 GMT Connection: keep-alive Transfer-Encoding: chunked

log*_*yth 6

在开始渲染之前,浏览器会缓冲传入的数据,直到收到一些数量.您的节点代码正如您所期望的那样,它将发送响应的第一部分,然后等待2秒,然后发送后半部分.

如果要观察此行为,可以发送一堆空格以使浏览器清空其缓冲区.如果在初始写入后添加此项,您将看到浏览器呈现请求的前半部分.

var str = '';
for (var i = 0; i < 2000; i++){
  str += ' ';
}
res.write(str);
Run Code Online (Sandbox Code Playgroud)

显然不要在实际代码中这样做,但是展示行为是很好的.