(PECL zmq >= 0.5.0)
ZMQSocket::recv — Получить сообщение
   Получает сообщение из сокета. По умолчанию получение будет блокироваться до тех
   пор, пока сообщение не будет доступно, только если не установлен флаг
   ZMQ::MODE_DONTWAIT.
   Можно использовать опцию сокета ZMQ::SOCKOPT_RCVMORE
   для получения сообщений состоящих из нескольких частей.
   Более подробно смотрите ZMQSocket::setSockOpt().
  
mode
       Флаги для настройки режима не блокирующего получения и работы с
       сообщениями, состоящими из нескольких частей.
       Смотрите константы ZMQ::MODE_*.
      
   Возвращает сообщение. Если используется режим ZMQ::MODE_DONTWAIT и операция
   заблокирована, то будет возвращено false.
  
Выбрасывает ZMQSocketException в случае возникновения ошибки.
Пример #1 Пример отправки/получения
Не блокирующая отправка/получение
<?php
/* Создаём новый объект очереди. Необходим сервер на другой стороне. */
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);
$queue->connect("tcp://127.0.0.1:5555");
/* Привязываем сокет 1 к очереди, отправляем и получаем */
$retries = 5;
$sending = true;
/* Запускаем цикл */
do {
    try {
        /* Пытаемся отправить/получить */
        if ($sending) {
            echo "Отправляем сообщение\n";
            $queue->send("Я сообщение!", ZMQ::MODE_DONTWAIT);
            $sending = false;
        } else {
            echo "Получен ответ: " . $queue->recv(ZMQ::MODE_DONTWAIT) . "\n";
            break;
        }
    } catch (ZMQSocketException $e) {
        /* EAGAIN означает, что операция заблокирована, повторяем */
        if ($e->getCode() === ZMQ::ERR_EAGAIN) {
            echo " - Получили EAGAIN, повторяем ($retries)\n";
        } else {
            die(" - Ошибка: " . $e->getMessage());
        }
    }
    /* Немножко ждём */
    usleep(5);
} while (--$retries);
?>Вывод приведённого примера будет похож на:
Отправляем сообщение - Получили EAGAIN, повторяем (4) Получен ответ: Я сообщение!
