require 'net/http'
urls = [
{'link' => 'http://www.google.com/'},
{'link' => 'http://www.yandex.ru/'},
{'link' => 'http://www.baidu.com/'}
]
urls.each do |u|
u['content'] = Net::HTTP.get(URI.parse(u['link']))
end
print urls
Este código funciona en estilo síncrono. Primera solicitud, segunda, tercera. Me gustaría enviar todas las solicitudes de forma asincrónica e imprimir urls
después de que todas estén hechas.Hacer múltiples solicitudes HTTP de forma asíncrona
¿Cuál es la mejor manera de hacerlo? ¿Fibra es adecuada para eso?
parece que funciona. ¿Pero cómo matar el hilo si el servidor no responde después de 15 segundos? – NVI
Puede usar 'Timeout.timeotu (20) do .... end'. Sin embargo, eso genera un error, por lo que tendrías que hacer algo con el flujo de tu programa, y tener una forma de etiquetar que una solicitud ha sido completada, además de verificar si existe la clave 'content'. –
¿Es Ruby's Net :: HTTP threadsafe? – Daniel777