Dan*_*iel 7 streaming http transfer-encoding node.js
我正在试验一个简单的NodeJS HTTP服务器的各种响应.我想要实现的效果是更快的网页视觉呈现.由于响应是通过transfer-encoding: chunked(右?)流式传输到浏览器的,我以为我可以先渲染页面布局,然后在延迟后再渲染其余的数据.
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {
'Content-Type': 'text/html'
, 'Transfer-Encoding': 'chunked'
});
res.write('<html>\n');
res.write('<body>\n');
res.write('hello ');
res.write('</body>\n');
res.write('</html>\n');
setTimeout(function () {
res.end('world');
},1500);
}).listen(3000, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
问题是,res.end('world')除非已经写入的数据足够长,否则似乎没有发送响应,所以例如res.write(new Array(2000).join('1'))而不是那样res.write('hello'),就可以做到这一点.
Node是否会缓冲我的写入,直到数据足够大才能发送?如果是这种情况,块大小是否可配置?
在读取结束标记之前,浏览器可能不会呈现数据。尝试输出纯文本而不是 html 标签来测试这一点。
您是否看到 firebug / chrome 检查器中有任何输入?
http://nodejs.org/api/stream.html#stream_stream_write_string_encoding_fd:
将具有给定编码的字符串写入流。如果字符串已刷新到内核缓冲区,则返回 true。返回 false 表示内核缓冲区已满,以后将有数据发送出去。
因此输出方法的结果.write()。看看它返回 true 还是 false。
| 归档时间: |
|
| 查看次数: |
14057 次 |
| 最近记录: |