Skip to content

Instantly share code, notes, and snippets.

@godfat
Created January 4, 2013 09:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save godfat/4451322 to your computer and use it in GitHub Desktop.
Save godfat/4451322 to your computer and use it in GitHub Desktop.
EM.threadpool_size = 10
class ::RainbowsEventMachineThreadPoolClient <
Rainbows::EventMachine::Client
def app_call input
set_comm_inactivity_timeout 0
@env[RACK_INPUT] = input
@env[REMOTE_ADDR] = @_io.kgio_addr
@env[ASYNC_CALLBACK] = method(:write_async_response)
@env[ASYNC_CLOSE] = EM::DefaultDeferrable.new
@deferred = true
EM.defer{
begin
status, headers, body = catch(:async) {
APP.call(@env.merge!(RACK_DEFAULTS))
}
if nil == status || -1 == status
@deferred = true
else
@deferred = nil
ev_write_response(status, headers, body, @hp.next?)
end
rescue Exception => e
EM.instance_variable_get(:@error_handler).call(e)
handle_error(e)
end
}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment