Поток с Node.js не работает - PullRequest
0 голосов
/ 25 сентября 2010

Я знаю, что с Node.js вы можете передавать данные.

Но почему этот код не работает:

var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write("hello");
    res.write("world");
}).listen(80);

Похоже, мне нужен res.end ()после последнего res.write (), чтобы иметь возможность отправить данные в браузер.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Я думаю, что кусок должен быть определенного размера перед отправкой.

1 голос
/ 28 сентября 2010

На самом деле, похоже, что вывод должен быть определенного размера, прежде чем браузер отобразит его. Вероятно, буфер в конце браузера. Когда вы отправляете res.end(), браузер сбрасывает этот буфер и визуализирует все, что находится в буфере. Однако, если res.end() не отправлено, браузер ожидает, пока его буфер не будет заполнен.

Я попытался поэкспериментировать следующий блок кода с Firefox и curl.

var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write("hello\n");
    for (var i = 0; i < 100; i++) {
      setTimeout(function() {
        res.write("world lotsa text here lotsa text\n");
      }, 400*i);
  }
}).listen(3000);

Вы можете попробовать это самостоятельно, перейдя к http://localhost:3000/ после запуска узла с вышеуказанным кодом.

Затем я попробовал то же самое с curl, и каждая строка показалась сразу же, как она была отправлена ​​с сервера.

Я использовал команду curl просто:

curl http://localhost:3000/

Обратите внимание на символы новой строки, которые я вставил в файл res.write, так как curl будет ждать строк новой строки перед выводом на стандартный вывод.

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