diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-06-30 09:15:20 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-06-30 09:18:02 +0000 |
commit | 7e3de7a12629423e911dae8955e7cc2035d6c401 (patch) | |
tree | 32184dbd0e9a7983adc812abac8292aeefe8e3ec | |
parent | 280c6816ac4ebbfae8298871e125376d30ef5679 (diff) | |
download | rainbows-7e3de7a12629423e911dae8955e7cc2035d6c401.tar.gz |
This should improve performance for static file responses.
-rw-r--r-- | lib/rainbows/rev/client.rb | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/rainbows/rev/client.rb b/lib/rainbows/rev/client.rb index 7929e32..888f8a9 100644 --- a/lib/rainbows/rev/client.rb +++ b/lib/rainbows/rev/client.rb @@ -80,12 +80,27 @@ module Rainbows end while true end + if IO.method_defined?(:sendfile_nonblock) + def sendfile(body) + body.pos += @_io.sendfile_nonblock(body, body.pos, 0x10000) + rescue Errno::EAGAIN + ensure + enable_write_watcher + end + else + def sendfile(body) + write(body.sysread(CHUNK_SIZE)) + end + end + def on_write_complete if body = @deferred_bodies[0] + # no socket or pipes, body must be a regular file to continue here return if DeferredResponse === body + begin begin - write(body.sysread(CHUNK_SIZE)) + sendfile(body) rescue EOFError # expected at file EOF @deferred_bodies.shift body.close |