class EventMachine::MultiRequest

EventMachine based Multi request client, based on a streaming HTTPRequest class, which allows you to open multiple parallel connections and return only when all of them finish. (i.e. ideal for parallelizing workloads)

Example

EventMachine.run {

 multi = EventMachine::MultiRequest.new

 # add multiple requests to the multi-handler
 multi.add(EventMachine::HttpRequest.new('http://www.google.com/').get)
 multi.add(EventMachine::HttpRequest.new('http://www.yahoo.com/').get)

  multi.callback  {
     p multi.responses[:succeeded]
     p multi.responses[:failed]

     EventMachine.stop
  }
}

Attributes

requests[R]
responses[R]

Public Instance Methods

add(conn) click to toggle source
# File lib/em-http/multi.rb, line 39
def add(conn)
  @requests.push(conn)

  conn.callback { @responses[:succeeded].push(conn); check_progress }
  conn.errback  { @responses[:failed].push(conn); check_progress }
end

Protected Instance Methods

check_progress() click to toggle source

invoke callback if all requests have completed

# File lib/em-http/multi.rb, line 49
def check_progress
  succeed(self) if (@responses[:succeeded].size +
                    @responses[:failed].size) == @requests.size
end

Public Class Methods

new(conns=[], &block) click to toggle source
# File lib/em-http/multi.rb, line 31
def initialize(conns=[], &block)
  @requests  = []
  @responses = {:succeeded => [], :failed => []}

  conns.each {|conn| add(conn)}
  callback(&block) if block_given?
end