stream master J has this pause stream which you could probably hack to do your thing
https://github.com/dominictarr/pause-stream On Wednesday, October 10, 2012 9:29:51 AM UTC-7, Michael Nutt wrote: > > I'm in a situation where I'm serving a handful of 1MB static files to > clients. We have our logic that determines which file to serve in node, so > putting nginx or varnish in front of our node app isn't a great solution. > Our first naive attempt was to load the entire file into a Buffer and cache > each one for 60 seconds, and when a client connected we would just > res.end(buffer). > > This worked fine up until yesterday, when a small number of slow clients > caused our app to fall over due to what I think was the kernel send buffer > filling up. I looked around for a buffer-to-stream implementation that > would be able to read a file off the disk in a single shot into a buffer, > then repeatedly stream it to later clients, but I couldn't find anything. > Here's what I ended up writing: > > https://gist.github.com/3866612 > > For the first client who requests the file, I call > file.pipe(cachedStream).pipe(response), then store cachedStream in memory. > For later clients, I can call cachedStream.pipeCached(response); > > It seems to work but is (acceptably) slower than the naive implementation > for fast clients. My questions are: is there a reason none of the current > static file implementations use something like this? Are there obvious > problems with it? And is there an optimal bufferSize setting for sending to > web clients, or is it solely based on the speed of the clients? > > Thanks, > Michael > -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
