Node Js проблемы с response.write - PullRequest
8 голосов
/ 20 мая 2011

Когда я пытаюсь по какой-то причине использовать http-соединение с потоком, запись не сбрасывается, пока я не вызову response.end ()
Я беру код прямо из демонстрации и не понимаю, в чем заключается моя проблема.
Когда я свернулся на сервер, мои заголовки верны.

HTTP/1.1 200 OK
Content-Type: text/plain
Connection: keep-alive
Transfer-Encoding: chunked


var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.write('hello');
      res.write(':');
      setTimeout(function(){ 
          res.end('World\n')},
          2000);
    }).listen(1337, "127.0.0.1");
    console.log('Server running at http://127.0.0.1:1337/');

Почему сервер не отправляет данные записи?

Ответы [ 5 ]

6 голосов
/ 20 мая 2011

Мне кажется, что браузер ведет себя специфически - firefox показывает данные ("Hello:") немедленно, в то время как chrome, похоже, буферизует и ждет окончания ответа.Обратите внимание, что chrome также показывает данные сразу, если вы сначала пишете больше данных (например, я написал 1000 «Hello»).

3 голосов
/ 20 мая 2011

Мне кажется, я понимаю, что вы имеете в виду ...

Из документа node.js:

При первом вызове response.write () он отправляет буферизованную информацию заголовка.и первое тело клиенту.Во второй раз вызывается response.write (), Node предполагает, что вы собираетесь передавать данные, и отправляет их отдельно.То есть ответ буферизируется до первого фрагмента тела.

http://nodejs.org/docs/v0.4.7/api/all.html#response.write

(BTW :))) 1010 *

2 голосов
/ 20 мая 2011

Попробуйте проверить свой код с помощью telnet или nc.curl обычно буферизует последнюю строку

0 голосов
/ 20 марта 2013

это связано с тем, что вы пропустили в коде код "}" в позиции после res.end('World\n') и перед запятой.

0 голосов
/ 20 мая 2011

После исправления отсутствующей фигурной скобки ваш код работает для меня из браузера.Кажется, что curl из командной строки ожидает полного ответа, но wireshark подтверждает, что он использует чанкованное кодирование, и в обоих случаях ответ был разделен на 2 пакета.символ новой строки после «World» до того, как он что-либо напечатает.Вы можете подтвердить это, напечатав еще одну новую строку после 'hello:'.

...