PROJET AUTOBLOG


le hollandais volant

Site original : le hollandais volant

⇐ retour index

[PHP] Faire plusieurs requêtes HTTP simultanées avec cURL

mardi 20 mai 2014 à 21:21
two elephants Toujours en développement de mon lecteur RSS en PHP, je me suis heurté au problème de la mise à jour des 154 flux auquel je suis abonné. Si le file_get_contents() fonctionne avec les URL, il ne peut les télécharger que les uns après les autres. Ainsi, même en ne mettant qu’un délai d’attente d’une seconde, la mise à jour prendrait au minimum 2 minutes 34 secondes. C’est bien trop long.

Une solution aurait pu être de faire 154 requêtes depuis les navigateur, pour ouvrir 154 instances de file_get_contents(), mais ça me semblait trop lourd.

La meilleure solution est à mon avis d’utiliser le module curl : lui, il peut faire 154 requêtes simultanées, et la durée de l’opération totale sera simplement la durée de la plus longue des requêtes et non la somme de toutes les requêtes. Avec cette méthode, je met à jour tous mes flux en moins d’une minute, toutes opérations incluses.

En pratique, pour récupérer le contenu de plusieurs URL, ça se présente comme suit.

On initialise une liste de sessions curl « $multihandler » : chacune correspondra à une instance de curl qui ira se connecter à une URL :
// init multi handler
$multihandler = curl_multi_init();
$handlers = $result = array();

On peuple la liste des sessions : chaque session est initialisée individuellement (avec une option CURLOPT_RETURNTRANSFER qui force curl à retourner le contenu plutôt que de l’afficher) puis on ajoute la session $handler[$i] à la liste des sessions $multihandler
// init each url
foreach ($urls as $i) {
	$handlers[$i] = curl_init($i);
	curl_setopt($handlers[$i], CURLOPT_RETURNTRANSFER, TRUE);
	curl_multi_add_handle($multihandler, $handlers[$i]);
}

Il n’y a plus qu’à établir toutes les connexions aux URL et télécharger les données.
Le $pendingConnex est une variable donnée par curl qui donne le nombre de connexions actives. Ce nombre diminuera progressivement jusqu’à zéro quand toutes les URL auront été téléchargées.

Les 10 ms d’attente sont là pour éviter que PHP ne fasse trop de tests, et permet de réduire la charge serveur (si on ne le met pas, la charge serveur explose — une méthode plus propre, mais dont le gain par rapport au sleep() n’est pas énorme est visible dans la doc).
10ms, pour un temps d’exécution de 10 seconde sur un processeur qui fait une boucle par nanoseconde (proc à 1 GHz) permet de réduire le nombre d’itérations par un facteur 10'000'000, ce qui est colossal : le serveur a dix millions de fois moins de puissance à allouer.

Dans mon lecteur RSS, je mets dans cette boucle do/while le code qui m’affiche à intervalle régulier le nombre de requêtes restantes.

// exec connexions + download
do {
	curl_multi_exec($multihandler, $pendingConnex);
	usleep(10000); // 10 ms
} while ($pendingConnex > 0);

À ce stade, les requêtes sont faites, les données récupérées en mémoire.
Il suffit de les parser et de les récupérer dans le tableau $result. Ce tableau contiendra les données en valeur et les URL en clés :

// parse responses
foreach ($urls as $i) {
	$result[] = curl_multi_getcontent($handers[$i]);
}

Le code ci-dessus devrait être suffisant.
Néanmoins, je conseille d’ajouter quelques options, avec curl_setopt() :

image de Jim Frost

Ceci n’est pas un drone

mardi 20 mai 2014 à 18:33
Depuis des mois, les médias et tout le monde en général utilise le terme « drone » pour un peu n’importe quoi, et surtout de façon totalement incohérente.

En général, ce qui est appelé drone, c’est quelque chose comme ça :

quadricopter
Cela n’est pourtant pas plus drone que ceci :

rc plane
Les deux sont des appareils radio-commandés, volant, destinés au grand public. Aucun des deux n’es muni de capteurs de vision nocturne, de cameras, de stabilisateurs, de détecteurs d’obstacles/de cibles ou de capteur GPS qui lui permettraient de prévoir de façon autonome une trajectoire et d’effectuer des opérations tout seul.

Ce ne sont donc pas des drones au sens propre.
Ce que vous voyez sur la première image, c’est un quadricoptère radio-commandé, et sur la seconde image un avion miniature radio-commandé.

Bien que l’ICAO désigne par le terme drone tout appareil volant inhabité, le terme désigne originellement un appareil autonome ou semi-autonome et à usage militaire.
La définition de l’ICAO inclurait t-il donc les avions, hélicoptères, quadricoptères, insectes radio-commandés miniatures, y compris ceux pour les enfants ? Ce n’est clairement pas le cas de la définition qu’en ont fait les médias et l’inconscience collective qui se sont mis à désigner par « drone » uniquement les multicoptères radiocommandés et les appareils volants inhabités militaires…

À défaut d’avoir une définition claire du drone il y a bien une réelle incohérence dans l’emploi du terme « drone » par tout le monde.

Au passage, l’utilisation des quadricoptères radio-commandés n’est pas interdite en France : du moment que l’appareil survole un espace à vous, qu’il n’y personne en dessous et qu’il n’y a pas de camera vous pouvez envoyer à 150 mètres de haut un bolide de 25 kilogrammes d’une puissance de 15kW (soit 20 CV, donc plus qu’une moto 125 cc) : personne ne pourra vous dire quoi que ce soit.
S’il y a une caméra, en revanche, vous ne pouvez pas dépasser 0,01 kW en puissance, 600 grammes de poids… et il vous faudra un diplôme et demander l’autorisation d’exploitation des clichés ou des films de toute personne figurant sur les vidéos (source)…

Copyreich : on peut toujours faire plus ridicule…

lundi 19 mai 2014 à 20:26
jesus everywhere swimming pool Un livre écrit par une personne qui se dit possédée par Jésus Christ tombe t-il sous le droit d’auteur de cette personne ou de Jésus ?

Telle est la question qui a secoué la Haute Cour régionale de Francfort qui considère que c’est la personne qui écrit physiquement le texte qui est l’auteur légal.

Concernant la paternité du texte on s’en fiche un peu, mais je trouve quand même délirant que certains se prennent la tête pour ce genre de trucs : la New Christian Endeavour Academy (en Allemagne) avaient en effet considéré que le texte était libre de droits car écrit par Jésus (et donc dans le domaine public) alors que la Foundation for Inner Peace (aux USA) qui est détentrice des droits du livre l’a attaqué en justice…

Bon.
Et si Jésus ressuscite il reprend ses droits d’auteurs ou pas, alors ?

Vous avez deux heures.

source image

Tout ce qu’il est possible de faire en jQuery et pas en vanilla JavaScript

vendredi 16 mai 2014 à 15:42

Blocage de TPB en France ?

mercredi 14 mai 2014 à 19:47
L’Australie s’était mise à bloquer des sites et a fait marche arrière car c’était trop cher.
Les Pays-Bas avaient bloqué The Pirate Bay mais l’ont débloqué car c’était inutile.

En France, on doit faire des économies mais ils seront quand même prêt à balancer des millions dans un blocage qui ne servira à rien, juste pour que le gouvernement fasse plaisir à môsieur CD en plastique.

Ils sont désespérant, à la fin.

Hé oh, réveillez-vous : on en est en 2014 : votre blocage, tout comme votre Hadopi ne servent à rien du tout, il faut maintenant évoluer !