about summary refs log tree commit homepage
path: root/lib/rainbows.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-01-05 16:19:17 -0800
committerEric Wong <normalperson@yhbt.net>2011-01-05 16:22:30 -0800
commit4060b7742d047c0000fd1bf4ac2c3b9cae95585a (patch)
treea08bcf85730b69abdaf91c3e1fb7edc28fa264ef /lib/rainbows.rb
parent9b6679ec50ecd184fccd195bd14bda3c6ea2070f (diff)
downloadrainbows-4060b7742d047c0000fd1bf4ac2c3b9cae95585a.tar.gz
Nagle's algorithm is harmful with the write-write-read sequence
during keepalive, so we disable it performance for users using
keepalive.  We always write headers with a separate write
because Rack response bodies may not always be ready for writing
when headers are.

This requires Unicorn 3.3.0
Diffstat (limited to 'lib/rainbows.rb')
-rw-r--r--lib/rainbows.rb11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/rainbows.rb b/lib/rainbows.rb
index 3f9058e..a8bfa78 100644
--- a/lib/rainbows.rb
+++ b/lib/rainbows.rb
@@ -1,8 +1,15 @@
 # -*- encoding: binary -*-
 require 'kgio'
 require 'unicorn'
-# the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
-Unicorn::SocketHelper::DEFAULTS[:tcp_defer_accept] = 60
+Unicorn::SocketHelper::DEFAULTS.merge!({
+  # the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
+  :tcp_defer_accept => 60,
+
+  # keep-alive performance sucks without this due to
+  # write(headers)-write(body)-read
+  # because we always write headers and bodies with two calls
+  :tcp_nodelay => true,
+})
 
 module Rainbows