Библиотека Ruby для одновременного выполнения нескольких HTTP-запросов

#ruby #gem

#ruby #rubygems

Вопрос:

Я ищу альтернативную библиотеку Ruby HTTP, которая выполняет несколько HTTP-вызовов одновременно и работает лучше, чем основная библиотека Net :: HTTP.

Ответ №1:

Вы, вероятно, ищете Typhoeus.

Typhoeus выполняет HTTP-запросы параллельно, четко инкапсулируя логику обработки

https://github.com/typhoeus/typhoeus

Ответ №2:

Зачем вам нужна сетевая библиотека, обрабатывающая параллелизм? Именно для этого и существуют потоки.

 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", amp;fetcher)
thread2 = Thread.new("http://localhost:9293", amp;fetcher)

thread1.join
thread2.join
  

Кроме того, я не понимаю, что вы подразумеваете под «работает лучше». Основные библиотеки обычно достаточно хороши, чтобы находиться в ядре. У вас есть какие-либо проблемы с Net:: HTTP?

Комментарии:

1. Typhoeus существует и фантастически справляется с этой проблемой, я не вижу причин, по которым вы могли бы изобретать велосипед здесь.

Ответ №3:

Вы можете использовать Parallel gem, он должен работать с любой HTTP-библиотекой Ruby.

Ответ №4:

Не уверен, что она работает лучше, чем 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