dumping ground for random patches and texts
 help / color / mirror / Atom feed
* [PATCH] http_parser: handle keepalive_requests internally
@ 2015-11-10  3:55 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2015-11-10  3:55 UTC (permalink / raw)
  To: spew

unicorn 5 dropped support for this, essentially allowing unlimited
persistent connections if we used the parser as-is.
Since most of our concurrency models cannot handle infinite
persistent connections without being vulnerable to DoS,
we must support keepalive_requests like nginx does.
---
 lib/rainbows/http_parser.rb | 15 +++++++++++++++
 lib/rainbows/http_server.rb |  4 ++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/lib/rainbows/http_parser.rb b/lib/rainbows/http_parser.rb
index ec55fe9..30a67cb 100644
--- a/lib/rainbows/http_parser.rb
+++ b/lib/rainbows/http_parser.rb
@@ -2,6 +2,21 @@
 # :enddoc:
 # avoid modifying Unicorn::HttpParser
 class Rainbows::HttpParser < Unicorn::HttpParser
+  @keepalive_requests = 100
+  class << self
+    attr_accessor :keepalive_requests
+  end
+
+  def initialize(*args)
+    @keepalive_requests = self.class.keepalive_requests
+    super
+  end
+
+  def next?
+    return false if (@keepalive_requests -= 1) <= 0
+    super
+  end
+
   def self.quit
     alias_method :next?, :never!
   end
diff --git a/lib/rainbows/http_server.rb b/lib/rainbows/http_server.rb
index 637710d..09f2589 100644
--- a/lib/rainbows/http_server.rb
+++ b/lib/rainbows/http_server.rb
@@ -92,11 +92,11 @@ class Rainbows::HttpServer < Unicorn::HttpServer
   end
 
   def keepalive_requests=(nr)
-    Unicorn::HttpRequest.keepalive_requests = nr
+    Rainbows::HttpParser.keepalive_requests = nr
   end
 
   def keepalive_requests
-    Unicorn::HttpRequest.keepalive_requests
+    Rainbows::HttpParser.keepalive_requests
   end
 
   def client_max_header_size=(bytes)
-- 
EW


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-11-10  3:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-10  3:55 [PATCH] http_parser: handle keepalive_requests internally Eric Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).