(PECL zmq >= 0.5.0)
ZMQPoll::poll â Sonde les Ă©lĂ©ments
Sonde les éléments du poll courant. Les éléments accessibles en lecture et en écriture
sont retournés respectivement dans les paramÚtres
readable et writable.
La mĂ©thode ZMQPoll::getLastErrors() peut ĂȘtre utilisĂ©e pour vĂ©rifier
s'il y a des erreurs.
readableTableau contenant les ZMQSockets/flux PHP retournés, et accessible en lecture. Le tableau sera réinitialisé au début de l'opération.
writableTableau contenant les ZMQSockets/flux PHP retournés, et accessible en écriture. Le tableau sera réinitialisé au début de l'opération.
timeoutDélai maximal d'attente de l'opération. -1 signifie que le poll va attendre qu'au moins un élément ne soit actif. Il est à noter que depuis la version 1.0.0, le délai maximal d'attente du poll est défini en millisecondes, plutÎt qu'en microsecondes.
Retourne un entier représentant la quantité d'objets avec activité.
Lance une ZMQPollException en cas d'erreur.
Exemple #1 Exemple avec ZMQPoll()
Crée un serveur poll simple
<?php
/* CrĂ©e un socket, ainsi qu'un masque de rĂ©ponse de la requĂȘte */
$context = new ZMQContext();
$server = $context->getSocket(ZMQ::SOCKET_REP);
/* Lie le port 5555 sur 127.0.0.1 */
$server->bind("tcp://127.0.0.1:5555");
/* Crée un nouveau poll pour les messages entrants/sortants */
$poll = new ZMQPoll();
/* Ajoute l'objet et écoute les entrées/sorties du poll */
$id = $poll->add($server, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo "Added object with id " . $id . "\n";
/* Initialise les tableaux accueillant les éléments en lecture et écriture */
$readable = array();
$writable = array();
while (true) {
/* Nombre d'événements à récupérer */
$events = 0;
try {
/* Bloque le Poll tant qu'il y a quelque chose Ă faire */
$events = $poll->poll($readable, $writable, -1);
$errors = $poll->getLastErrors();
if (count($errors) > 0) {
foreach ($errors as $error) {
echo "Error polling object " . $error . "\n";
}
}
} catch (ZMQPollException $e) {
echo "poll failed: " . $e->getMessage() . "\n";
}
if ($events > 0) {
/* Boucle sur les objets accessibles en lecture et réceptionne les messages */
foreach ($readable as $r) {
try {
echo "Received message: " . $r->recv() . "\n";
} catch (ZMQException $e) {
echo "recv failed: " . $e->getMessage() . "\n";
}
}
/* Boucle sur les objets accessibles en écriture et retourne les messages */
foreach ($writable as $w) {
try {
$w->send("Got it!");
} catch (ZMQException $e) {
echo "send failed: " . $e->getMessage() . "\n";
}
}
}
}
?>