Node Js problems with response.write

Heavy Gray picture Heavy Gray · May 20, 2011 · Viewed 24.5k times · Source

When I try to utilize http stream connection for some reason write does not flush until I call response.end()
I am taking the code straight from the demo and do not understand what my problem is.
When I curl to the server my headers are correct.

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

Why is the server not sending the write data?

Answer

Geoff Chappell picture Geoff Chappell · May 20, 2011

I seems to be browser specific behavior -- firefox shows the data ("Hello:") immediately while chrome seems to buffer and wait until the response is ended. Note that chrome also shows the data immediately if you write more data at first (e.g. I wrote 1000 "Hello"s).