J'essaie de vérifier si un site Web est opérationnel. Je le fais actuellement avec la librairie UserAgent en Perl avec le timeout 1. Cependant, c'est encore trop lent pour moi. J'appelle le script toutes les cinq minutes à partir de cron. Il y a beaucoup de liens à vérifier et le script prend plus de cinq minutes pour terminer l'exécution. Donc, j'ai besoin d'un moyen plus efficace de le faire. Il peut même être une solution en C.Quel est le moyen le plus rapide de vérifier si un site web est en Perl ou C?
Répondre
Après les moyens d'accélérer ce:
- juste vérifier si nous pouvons mettre en place une prise à 80 port du serveur cible, n'envoyez pas vraiment Get http demande, ou tout simplement envoyer une simple demande HEAD.
- Utilisez multi-thread pour le rendre plus rapide.
boucle -I http://hostname
La première ligne contiendra 503 ou 404 si le service ne avaliable ou page non trouvée.
rendements de temps pour cette boucle -I http://www.google.com
real 0m0.125s
user 0m0.004s
sys 0m0.004s
et ce pour boucle -I http://www.google.cmo
real 0m0.120s
user 0m0.004s
sys 0m0.004s
En fait, j'ai essayé avec wget il travaillé très rapide pour les sites web existants mais a dû attendre les liens brisés. Mais je vais essayer la boucle aussi. – systemsfault
S'il y a beaucoup de liens, je vous suggère de rendre le programme multi-threaded ou fork() il parfois. De cette façon, vous pouvez vous attendre à des améliorations de vitesse.
Malheureusement, mon perl n'est pas compilé avec multi-thread, mais je vais vérifier l'option multi-processus – systemsfault
Vous pouvez utiliser des threads même sans avoir un thread perl. 'use forks;' - http://search.cpan.org/perldoc?forks –
Oh ok, cette connaissance vous aidera aussi pour d'autres choses. Thanx Alan. Mais cela fonctionnera-t-il en écrivant dans un fichier? – systemsfault
Comment utiliser httping?
L'extraction de ressources à partir du réseau implique généralement un certain temps de latence. Comme Alan Haggai Alavi l'a suggéré, vous voudrez probablement diviser le travail en plusieurs processus/processus parallèles. La documentation du module Parallel::ForkManager
a même un exemple sur lequel vous devriez pouvoir vous baser.
Parallel :: ForkManager est sympa. –
Ouais hillu, mais je pense que je ne peux pas utiliser l'option de parallélisation parce que je vérifie si un site Web est en place écrire l'URL d'un fichier png spécifique dans un fichier. Donc, si je paralléliser le programme ne sera pas un problème lors de l'écriture dans un fichier? – systemsfault
Comme je comprends la suggestion de hillu, vous devriez avoir plusieurs processus/threads, mais un site devrait être surveillé par un processus (au maximum). Il ne devrait donc pas y avoir de conflits entre les processus. –
Il est très probablement lent parce que vous le faites de manière séquentielle.
Envisagez d'utiliser LWP::Parallel::UserAgent - il exécutera de nombreuses demandes en même temps.
Je ne sais pas beaucoup de C (BLASPHÈME!) Ni Perl, mais comment je le vois, je les opérations suivantes:
- Un thread pour l'écriture de fichiers. Ce fil aurait un endroit où il pourrait écrire ses commandes.
- Un fil par site que vous voulez vérifier. Le thread utilisera la méthode qui vous convient le mieux parmi les autres réponses, puis rapportera au thread principal via un événement qu'il peut déclencher.
2cts
- 1. Quel est le moyen le plus rapide de vérifier si deux nombres donnés sont en coprime?
- 2. NSMutableArray. Quel est le moyen le plus rapide pour le convertir en un tableau C simple?
- 3. Quel est le moyen le plus rapide d'apprendre l'objectif-c pour un développeur expérimenté en PHP?
- 4. Quel est le moyen le plus rapide pour déterminer si une URL existe en PHP?
- 5. Quel est le moyen le plus rapide de générer un ensemble unique en .net 2
- 6. Quel est le moyen le plus rapide de dédupliquer une chaîne en C# (ASP.net)
- 7. Quel est le plus rapide à transmettre: XML ou DataTables?
- 8. Quel est le moyen le plus rapide de vérifier par programme la bonne forme des fichiers XML en C#?
- 9. Quel est le moyen le plus rapide de charger une colonne text ou ntext SQL Server?
- 10. Quel est le moyen le plus rapide de détecter un hôte inaccessible en Java?
- 11. Quel est le moyen le plus simple d'implémenter une fonction de recherche sur un site Web?
- 12. Quel est le moyen le plus rapide pour combiner deux fichiers xml en un
- 13. Quel est le moyen le plus rapide de remplir un tableau avec des nombres en PHP?
- 14. Quel est le moyen le plus rapide de parcourir un objet Excel Range à l'envers?
- 15. quel est le moyen de vérifier si la cellule Excel est verrouillé ou non?
- 16. Quel est le moyen le plus simple de vérifier qu'une connexion réseau est disponible?
- 17. Quel est le moyen le plus simple de récupérer une page Web en C?
- 18. Comment vérifier si un site Web est en cours
- 19. Quel est le moyen le plus simple de programmer une période bêta sur un site?
- 20. Quel est le plus grand site web desservi par JBoss?
- 21. Quel est le moyen le plus rapide de naviguer en haut d'une classe dans Visual Studio?
- 22. Dans jQuery, quel est le moyen le plus rapide de sélectionner un groupe d'éléments?
- 23. Quel est le moyen le plus rapide de trouver un fichier dans Zend Studio pour Eclipse?
- 24. Lequel est le plus rapide réécriture ou URL de dossier?
- 25. Quel est le moyen le plus rapide de commencer avec le framework Kohana PHP?
- 26. Quel est le moyen le plus rapide pour télécharger un énorme ensemble de données à appengine?
- 27. Quel est le moyen le plus rapide pour injecter de la journalisation sur une application Web en direct?
- 28. Quel est le plus grand site de CakePHP en volume?
- 29. Un éditeur pour un objet de données en swing, quel est le moyen le plus simple?
- 30. Quel est le moyen le plus rapide pour supprimer un grand dossier dans Windows?
Serait-ce couvrir toutes les bases souhaitées? Que faire s'il y a une erreur de serveur sur la page principale ou quelque chose? –
Going multi thread, bien que cela semble agréable, est inutile overkill. Habituellement, l'utilisation d'E/S asynchrones est suffisante. –