Aller au contenu

Sujets conseillés

Posté

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

Posté (modifié)

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
Posté (modifié)

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

Veuillez vous connecter pour commenter

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



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