2010-05-19 5 views
1

Mon application vérifie un certain nombre de domaines pour voir s'ils sont valides (environ 100). J'ai le code suivant pour vérifier un seul domaine:Requête HTTP multiple - Rails

def self.test_url uri, limit = 10 
    if limit == 0 
     return get_error_messages("001") 
    end 
    begin 
     url = URI.parse(uri) 
     response = Net::HTTP.start(url.host, url.port).request_head('/') 
    rescue SocketError => e 
     return get_error_messages("002") 
    end 
    case response 
     when Net::HTTPRedirection then test_url(response['location'], limit - 1) 
     else return get_error_messages(response.code) 
    end 
end 

Le code vérifie le code de réponse tout en tenant compte des redirections. Cela fonctionne bien. Le seul problème que j'ai, c'est quand je mets ça en boucle, je veux qu'il fonctionne en parallèle. Je n'ai donc pas à attendre que le domaine 1 réponde avant de pouvoir demander le domaine 2.

J'ai géré ceci en PHP en utilisant curl_multi pour exécuter les requêtes en parallèle. Y at-il une chose similaire que je peux faire dans Rails?

Répondre

1

Une suggestion est de diviser votre liste de domaines en deux ou plusieurs parties du tableau

puis commencer à fils différents pour chacun d'eux

t1 = {Thread.new func1()} t2 = Thread. nouveau {func1()} t1.join t2.join

http://www.tutorialspoint.com/ruby/ruby_multithreading.htm

Ce parallélisme est émulé et je ne vois pas pourquoi il ne sera pas plus rapide que b4