Ruby库可以同时发出多个HTTP请求

时间:2011-11-06 14:43:00

标签: ruby gem

我正在寻找一个备用的Ruby HTTP库,它可以同时进行多个HTTP调用,并且比核心的Net :: HTTP库表现更好。

4 个答案:

答案 0 :(得分:3)

你可能正在寻找Typhoeus。

  

Typhoeus并行运行HTTP请求,同时干净地封装处理逻辑

https://github.com/typhoeus/typhoeus

答案 1 :(得分:3)

为什么需要网络库处理并行性?这正是线程的用途。

require "open-uri"

fetcher = lambda do |uri|
  puts "Started fetching #{uri}"
  puts open(uri).read
  puts "Stopped fetching #{uri}"
end

thread1 = Thread.new("http://localhost:9292", &fetcher)
thread2 = Thread.new("http://localhost:9293", &fetcher)

thread1.join
thread2.join

另外,我不明白“表现更好”是什么意思。核心库通常足以成为核心库。你对Net :: HTTP有什么问题吗?

答案 2 :(得分:1)

您可以使用Parallel gem,它应该适用于任何Ruby HTTP库。

答案 3 :(得分:0)

不确定它是否比Typhoeus表现更好,但你可以使用Eventmacheine + em-http-request。有一个发送多个请求的例子。

require 'eventmachine'
require 'em-http'

EventMachine.run {
  multi = EventMachine::MultiRequest.new

  reqs = [
    'http://google.com/',
    'http://google.ca:81/'
  ]

  reqs.each_with_index do |url, idx|
    http = EventMachine::HttpRequest.new(url, :connect_timeout => 1)
    req = http.get
    multi.add idx, req
  end

  multi.callback  do
    p multi.responses[:callback].size
    p multi.responses[:errback].size
    EventMachine.stop
  end
}

https://github.com/igrigorik/em-http-request