ZMQPoll::poll

(PECL zmq >= 0.5.0)

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

Описание

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

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

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

readable

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

writable

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

timeout

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

Примеры

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

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

<?php

/* Создаем сокет, паттерн request-reply (отвечающий сокет) */
$context = new ZMQContext();
$server  $context->getSocket(ZMQ::SOCKET_REP);

/* Привязываем к порту 5555 на адрес 127.0.0.1 */
$server->bind("tcp://127.0.0.1:5555");

/* Создаем новый пул опроса для входящих/исходящих сообщений */
$poll = new ZMQPoll();

/* Добавляем объект и слушаем на предмет опроса входящих/исходящих */
$id $poll->add($serverZMQ::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";
           }
       }
   }
}
?>

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

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