Aller au contenu

Paralléliser des requêtes


Poppy

Sujets conseillés

Yep :)

Je voulais effectuer plusieurs requêtes simultannément :whistling:

stream_select() : j'ai pas bien compris comment on s'en servait, quelqu'un pourrait m'éclairer ? :blush:

Merci d'avance :P

Lien vers le commentaire
Partager sur d’autres sites

par exemple, pour récupérer dans un tableau de chaînes les données lisibles sur plusieurs flux :

$buffer = array();
$remove = array();
$streams = array($sd1, $sd2, $sd3);
$timeout = NULL; // on peut mettre un timeout en secondes
while(true)
{
   $r = array_diff($streams, $remove);
   if(!$r) break;
   $chg = stream_select($r, $w = NULL, $e = NULL, $timeout);
   if($chg === false)
   {
       // erreur, throw new Exception par exemple
   }
   if($chg > 0)
   {
       foreach($r as $sd)
       {
            $data = fread($sd, 4096);
            if($data === false)
            {
                 // erreur
            }
            if($data == '')
            {
                 $remove[] = $sd;
            }
            if(!isset($buffer[intval($sd)]))
            {
                $buffer[intval($sd)] = $data;
            }
            else
            {
                $buffer[intval($sd)] .= $data;
            }
       }
   }
   else
   {
       // time out (si fourni)
   }
}

Modifié par loufoque
Lien vers le commentaire
Partager sur d’autres sites

En quoi c'est compliqué ?

ça bloque jusqu'à timeout secondes dans l'attente de données lisibles sur un des flux du tableau de flux passé en paramètre.

ça retourne alors le nombre de flux qui sont lisibles et ça modifie le tableau en conséquence.

(je suis parti du principe qu'on ne considérait que l'attente pour la lecture, mais il y a aussi l'attente pour l'écriture et les exceptions)

Modifié par loufoque
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...