From 5d1e2f0ada7d63ad539bac7597d27ef2c4de2cdd Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 14 Nov 2015 02:47:21 +0000 Subject: http_parser: handle keepalive_requests internally 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 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lib/rainbows/http_parser.rb') 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 -- cgit v1.2.3-24-ge0c7