一尘不染

使用NodeJS流Http响应

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

问题是,它好像没有发送响应,直到res.end('world')除非已写入的数据是足够长的时间,所以例如res.write(new Array(2000).join('1')),而不是说res.write('hello'),会做的伎俩。

Node是否正在缓冲我的写操作,直到数据足够大到可以发送为止?如果是这样,块大小是否可以配置?


阅读 433

收藏
2020-07-07

共1个答案

一尘不染

在读取结束标记之前,浏览器可能不会呈现数据。尝试输出纯文本而不是html标签来进行测试。

您是否看到任何输入进入Firebug / Chrome检查器?

相关问题

http://nodejs.org/api/stream.html#stream_stream_write_string_encoding_fd

将具有给定编码的字符串写入流。如果字符串已刷新到内核缓冲区,则返回true。返回false表示内核缓冲区已满,并且将来会发送数据。

因此输出.write()方法的结果。查看它是否返回true或false。

2020-07-07