(PECL zmq >= 0.5.0)
ZMQPoll::poll — Опросить все элементы пула
   Опрашивает все элементы пула. Читаемые и записываемые элементы помещаются в
   параметры readable и writable
   соответственно.
   Для проверки возникших ошибок используйте метод
   ZMQPoll::getLastErrors().
  
readableМассив, в который будут возвращены читаемые объекты ZMQSockets/потоки PHP. Перед началом работы массив будет очищен.
writableМассив, в который будут возвращены записываемые объекты ZMQSockets/потоки PHP. Перед началом работы массив будет очищен.
timeoutВремя ожидания операции. -1 означает, что опрос будет ждать до последнего. Обратите внимание, что с версии 1.0.0, время ожидания задаётся в миллисекундах, а не в микросекундах, как раньше.
Возвращает количество элементов, для которых происходила какая либо активность.
Выбрасывает ZMQPollException в случае возникновения ошибки.
Пример #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($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";
           }
       }
   }
}
?>