From 7e3de7a12629423e911dae8955e7cc2035d6c401 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 30 Jun 2010 09:15:20 +0000 Subject: rev: add sendfile support This should improve performance for static file responses. --- lib/rainbows/rev/client.rb | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3-24-ge0c7