Получить сообщение

# ZMQSocket::recv

(PECL zmq >= 0.5.0)

ZMQSocket::recv — Получить сообщение

### Описание

public function ZMQSocket::recv(int `$mode` = 0): string

Получает сообщение из сокета. По умолчанию получение будет блокироваться до тех пор, пока сообщение не будет доступно, только если не установлен флаг `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)
    Получен ответ: Я сообщение!

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open