Sha256: 089cf4bed04cf03bd3ed2171b7c46cc98e3fce641f61806cf0a3392414e70c66
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
# -*- encoding: binary -*- require 'thread' # This concurrency model implements a single-threaded app dispatch and # spawns a new thread for writing responses. This concurrency model # should be ideal for apps that serve large responses or stream # responses slowly. # # Unlike most \Rainbows! concurrency models, WriterThreadSpawn is # designed to run behind nginx just like Unicorn is. This concurrency # model may be useful for existing Unicorn users looking for more # output concurrency than socket buffers can provide while still # maintaining a single-threaded application dispatch (though if the # response body is generated on-the-fly, it must be thread safe). # # For serving large or streaming responses, setting # "proxy_buffering off" in nginx is recommended. If your application # does not handle uploads, then using any HTTP-aware proxy like # haproxy is fine. Using a non-HTTP-aware proxy will leave you # vulnerable to slow client denial-of-service attacks. module Rainbows::WriterThreadSpawn # :stopdoc: include Rainbows::Base def write_body(my_sock, body, range) # :nodoc: if body.respond_to?(:close) Rainbows::SyncClose.new(body) { |body| my_sock.queue_body(body, range) } else my_sock.queue_body(body, range) end end def process_client(client) # :nodoc: super(Client.new(client)) end def worker_loop(worker) # :nodoc: Client.const_set(:MAX, worker_connections) super # accept loop from Unicorn Client.quit end # :startdoc: end # :enddoc: require 'rainbows/writer_thread_spawn/client'
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rainbows-2.1.0 | lib/rainbows/writer_thread_spawn.rb |