title: How do Node.js Streams work?
body: <p>I have a question about Node.js streams - specifically how they work conceptually. </p>
  
  <p>There is no lack of documentation on how to use streams. But I've had difficulty finding how streams work at the data level. </p>
  
  <p>My limited understanding of web communication, HTTP, is that full "packages" of data are sent back and forth. Similar to an individual ordering a company's catalogue, a client sends a GET (catalogue) request to the server, and the server responds with the catalogue. The browser doesn't receive a page of the catalogue, but the whole book. </p>
  
  <p>Are node streams perhaps multipart messages? </p>
  
  <p>I like the REST model - especially that it is stateless. Every single interaction between the browser and server is completely self contained and sufficient. Are node streams therefore not RESTful? One developer mentioned the similarity with socket pipes, which keep the connection open. Back to my catalogue ordering example, would this be like an infomercial with the line "But wait! There's more!" instead of the fully contained catalogue?</p>
  
  <p>A large part of streams is the ability for the receiver 'down-stream' to send messages like 'pause' &amp; 'continue' upstream. What do these messages consist of? Are they POST?</p>
  
  <p>Finally, my limited visual understanding of how Node works includes this event loop. Functions can be placed on separate threads from the thread pool, and the event loop carries on. But shouldn't sending a stream of data keep the event loop occupied (i.e. stopped) until the stream is complete? How is it ALSO keeping watch for the 'pause' request from downstream?n Does the event loop place the stream on another thread from the pool and when it encounters a 'pause' request, retrieve the relevant thread and pause it?</p>
  
  <p>I've read the node.js docs, completed the nodeschool tutorials, built a heroku app, purchased TWO books (real, self contained, books, kinda like the catalogues spoken before and likely not like node streams), asked several "node" instructors at code bootcamps - all speak about how to use streams but none speak about what's actually happening below.</p>
  
  <p>Perhaps you have come across a good resource explaining how these work? Perhaps a good anthropomorphic analogy for a non CS mind?</p>