为什么response.write似乎阻止我在Node.js中的浏览器?

时间:2012-01-25 23:44:55

标签: node.js blocking

我正在尝试按照这里的教程:

http://nodetuts.com/tutorials/2-webtail-nodejs-child-processes-and-http-chunked-encoding.html#video

以下代码可以使用

var http = require('http');
var spawn = require('child_process').spawn;

http.createServer(
function (request, response) {
    response.writeHead(200, {
        'Content-Type':'text/plain'
    });
    var tail_child = spawn('tail', ['-f', 'temp.txt']);

    request.connection.on('end', function () {
        tail_child.kill();
    });

    tail_child.stdout.on('data', function (data) {
        console.log(data.toString());
        response.end(data.toString());

    });

}).listen(9000);

但是,浏览器不会收到temp.txt的更新。如果我更换

response.end(data.toString());

response.write(data.toString());

它似乎阻止,浏览器中没有任何内容呈现。

编辑:我希望浏览器根据教程实时连续显示文本文件的附加内容

1 个答案:

答案 0 :(得分:2)

你应该尝试使用curl来测试transfer-encoding:chunked。许多Web浏览器不会以块的形式呈现内容,可能是因为以这种方式呈现HTML效率不高。如果你在响应中放入了足够的数据,浏览器可能会按照你的预期开始渲染它,但它不是我正常使用的解决方案。

如果你想以你希望的方式将数据流式传输到网络浏览器,我会使用websockets或者可能会对你的流媒体页面进行ajax调用,这会调用html,因为ajax调用应该触发每个块的事件。