ZMQPoll::poll

(PECL zmq >= 0.5.0)

ZMQPoll::pollОпросить все элементы пула

Описание

publicZMQPoll::poll(array&$readable, array&$writable, int$timeout = -1): int

Опрашивает все элементы пула. Читаемые и записываемые элементы помещаются в параметры readable и writable соответственно. Для проверки возникших ошибок используйте метод ZMQPoll::getLastErrors().

Список параметров

readable

Массив, в который будут возвращены читаемые объекты ZMQSockets/потоки PHP. Перед началом работы массив будет очищен.

writable

Массив, в который будут возвращены записываемые объекты ZMQSockets/потоки PHP. Перед началом работы массив будет очищен.

timeout

Время ожидания операции. -1 означает, что опрос будет ждать до последнего. Обратите внимание, что с версии 1.0.0, время ожидания задаётся в миллисекундах, а не в микросекундах, как раньше.

Возвращаемые значения

Возвращает количество элементов, для которых происходила какая либо активность.

Ошибки

Выбрасывает ZMQPollException в случае возникновения ошибки.

Примеры

Пример #1 Пример использования ZMQPoll()

Создадим простой сервер опроса

<?php


$context = new ZMQContext();
$server = $context->getSocket(ZMQ::SOCKET_REP);


$server->bind("tcp://127.0.0.1:5555");


$poll = new ZMQPoll();


$id = $poll->add($server, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo
"Added object with id " . $id . "\n";


$readable = array();
$writable = array();

while (
true) {

$events = 0;

try {

$events = $poll->poll($readable, $writable, -1);
$errors = $poll->getLastErrors();

if (
count($errors) > 0) {
foreach (
$errors as $error) {
echo
"Ошибка опроса объекта " . $error . "\n";
}
}
} catch (
ZMQPollException $e) {
echo
"Опрос не удался: " . $e->getMessage() . "\n";
}

if (
$events > 0) {

foreach ($readable as $r) {
try {
echo
"Получено сообщение: " . $r->recv() . "\n";
} catch (
ZMQException $e) {
echo
"Ошибка получения: " . $e->getMessage() . "\n";
}
}


foreach ($writable as $w) {
try {
$w->send("Получил!");
} catch (
ZMQException $e) {
echo
"Ошибка отправки: " . $e->getMessage() . "\n";
}
}
}
}
?>
To Top