Hacker News new | past | comments | ask | show | jobs | submit login

This probably won't work if you have gzip on, right?



I'll have to test to be sure you still get streaming. It depends how the browsers handle xhr2 events with regard to gzip'd http. I /think/ it'll be fine but I need to check to be sure. Eg, with gzip on you still get progressive html rendering.


From what I remember, Apache will send you a single chunk if you have it on, for example:

  <? 
  echo 'Hey<br>';
  flush();
  ob_flush();
  sleep(20);
  echo 'Bye';
  ?>

  
Will send you "Hey<br>Bye" after 20sec instead of what you would expect (which does work with gzip off).

Besides, even if you manage to stream it, I imagine inflating partially received content is not trivial for the browser.


Gzip is a streaming format -- it's designed as a compressed format for communication streams. Browsers have no trouble with this. The Apache behavior you describe is probably related to buffering settings, which I think can be configured.


Quick experiment says: Gzip can be written out as a stream ok. Can't comment on Apache but Node does it fine.

Firefox's xhr fires progress events for gzipped content but not Chrome's. Looking to see if I can find a way round it.



in my experience, you need to set flush to SYNC for it to work on chrome without manually flushing


Do you know how to do that from node?

Here's the little test service I wrote to stream out some gzipped content:

https://github.com/jimhigson/oboe.js/blob/master/test/stream...


You need to construct the stream with flush: require('zlib').Z_SYNC_FLUSH




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: