节点Js与response.write的问题

当我尝试利用httpstream连接出于某种原因,直到我调用response.end()才写入,
我直接从演示代码,不明白我的问题是什么。
当我curl到服务器我的头是正确的。

HTTP/1.1 200 OK Content-Type: text/plain Connection: keep-alive Transfer-Encoding: chunked var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('hello'); res.write(':'); setTimeout(function(){ res.end('World\n')}, 2000); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1337/'); 

为什么服务器不发送写入数据?

我似乎是浏览器的具体行为 – firefox显示数据(“你好:”),而铬似乎缓冲,并等待,直到响应结束。 请注意,如果您首先编写更多数据,chrome也会立即显示数据(例如,我写了1000个“Hello”)。

我想我明白你的意思

从node.js文档:

第一次调用response.write()时,它会将caching的头信息和第一个正文发送给客户端。 第二次调用response.write(),Node假定你要传输数据,并分别发送。 也就是说,响应被缓冲到第一个主体。

http://nodejs.org/docs/v0.4.7/api/all.html#response.write

(好的端口使用BTW :))

尝试用telnet或nc来检查你的代码。 curl通常缓冲最后一行

修复缺less的大括号后,您的代码正在从浏览器为我工作。 从命令行curl似乎等待完整的响应,但wireshark确认它确实使用分块编码,在这两种情况下,响应被分成2个包。

我假设curl输出是行缓冲的,并在“世界”之后等待换行符,然后再打印任何内容。 您可以通过在“hello:”后面打印另一个换行符来确认这一点。

这是因为你在res.end('World\n')和逗号之前的位置错过了你的代码中的一个“}”。