ZMQPoll::poll

(PECL zmq >= 0.5.0)

ZMQPoll::poll — Sonde les Ă©lĂ©ments

Description

public function ZMQPoll::poll(array &$readable, array &$writable, int $timeout = -1): int

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.

Liste de paramĂštres

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. 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.

Valeurs de retour

Retourne un entier représentant la quantité d'objets avec activité.

Erreurs / Exceptions

Lance une ZMQPollException en cas d'erreur.

Exemples

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";
}
}
}
}
?>
add a note

User Contributed Notes

There are no user contributed notes for this page.