(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.
readable
Tableau contenant les ZMQSockets/flux PHP retournés, et accessible en lecture. Le tableau sera réinitialisé au début de l'opération.
writable
Tableau contenant les ZMQSockets/flux PHP retournés, et accessible en écriture. Le tableau sera réinitialisé au début de l'opération.
timeout
Délai maximal d'attente de l'opération. -1 signifie que le poll va attendre qu'au moins un élément ne soit actif. Notez que depuis la version 1.0.0, le délai maximal d'attente du poll est défini en millisecondes, plutôt 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()
Create a simple poll server
<?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();
/* Ajout 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 {
/* Bloc 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 accessible 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 accessible en écriture et retourne les messages */
foreach ($writable as $w) {
try {
$w->send("Got it!");
} catch (ZMQException $e) {
echo "send failed: " . $e->getMessage() . "\n";
}
}
}
}
?>