From 1fe42f0f8e7f0902eb02860fb098cbd73ddf4e5d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 6 Feb 2009 18:00:08 -0800 Subject: Use read(2) and blocking I/O for clients Unicorn is only designed for fast internal networks (and loopback); so avoid wasting time with userspace I/O buffering. This should not significantly affect userspace threading on 1.8 in case your application itself is running threads for some (masochistic) reason as long as the clients you're serving directly with Unicorn are fast. --- lib/unicorn.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/unicorn.rb') diff --git a/lib/unicorn.rb b/lib/unicorn.rb index 794786a..bc940f0 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -6,6 +6,7 @@ require 'uri' require 'stringio' require 'fcntl' require 'logger' +require 'io/nonblock' # Compiled extension require 'http11' @@ -82,7 +83,7 @@ module Unicorn parser, params = @parser, @params parser.reset params.clear - data = client.readpartial(Const::CHUNK_SIZE) + data = client.sysread(Const::CHUNK_SIZE) nparsed = 0 # Assumption: nparsed will always be less since data will get filled with more @@ -119,7 +120,7 @@ module Unicorn break #done else # Parser is not done, queue up more data to read and continue parsing - chunk = client.readpartial(Const::CHUNK_SIZE) + chunk = client.sysread(Const::CHUNK_SIZE) break if !chunk or chunk.length == 0 # read failed, stop processing data << chunk -- cgit v1.2.3-24-ge0c7