#ruby #gem
#ruby #rubygems
Вопрос:
Я ищу альтернативную библиотеку Ruby HTTP, которая выполняет несколько HTTP-вызовов одновременно и работает лучше, чем основная библиотека Net :: HTTP.
Ответ №1:
Вы, вероятно, ищете Typhoeus.
Typhoeus выполняет HTTP-запросы параллельно, четко инкапсулируя логику обработки
Ответ №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
}