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

好,

我完全是新的node.js。 开始尝试,我正在关注由Ryan Dahl( http://www.youtube.com/watch?v=jo_B4LTHi3I )所做的介绍,在这一点(大概是0:17:00),有关于服务器处理响应,

基本的例子是有一个来自networking服务器的“hello”输出,然后在2秒后出现“世界”,这个代码应该这样做

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

所以我运行它,我得到了世界您好,但只有一个响应从服务器与完整的结果,即请求> 2秒>'你好世界'。 而不是请求>你好> 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

在开始渲染之前,浏览器会caching传入的数据,直到收到一定数量的数据为止。 你的Node代码的function和你所期望的一样,它会发送响应的第一部分,然后等待2秒钟,然后发送下半部分。

如果你想观察这种行为,你可以发送一堆空格让浏览器清空它的缓冲区。 如果您在初始写入之后添加了此内容,则会看到浏览器呈现请求的前半部分。

 var str = ''; for (var i = 0; i < 2000; i++){ str += ' '; } res.write(str); 

显然,不要用真正的代码来做这件事,但是展示行为是很好的。

使用curl,您的代码按预期执行。 一个浏览器等全身,而curl打印“你好”,等待2秒钟然后打印“worls”。 我复制了你的确切代码,没关系。