Почему response.write блокирует мой браузер в Node.js? - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь следовать руководству здесь:

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.текст.Если я заменим

response.end(data.toString());

на

response.write(data.toString());

Похоже, что он заблокирован, и в браузере ничего не отображается.

Редактировать: Я бы хотел, чтобы браузер отображал постояннолюбой добавляет в текстовый файл в режиме реального времени в соответствии с учебником

1 Ответ

2 голосов
/ 26 января 2012

Вместо этого вы должны попробовать использовать curl для проверки кодировки передачи: chunked. Многие веб-браузеры не будут отображать содержимое порциями, возможно потому, что не очень эффективно отображать HTML таким способом. Если вы добавите в ответ достаточно данных, в конечном итоге браузер может начать отображать их так, как вы ожидаете, но это не решение, которое я бы использовал в обычном режиме.

Если вы хотите передавать данные в веб-браузер так, как вы надеетесь, я бы использовал веб-сокеты или, возможно, вызов ajax для вашей потоковой страницы, который будет отображать html по мере его поступления, поскольку вызов ajax должен запускаться события для каждого чанка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...