ZMQSocket::recv

(PECL zmq >= 0.5.0)

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

Описание

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

Получает сообщение из сокета. По умолчанию получение будет блокироваться до тех пор, пока сообщение не будет доступно, только если не установлен флаг ZMQ::MODE_DONTWAIT. Можно использовать опцию сокета ZMQ::SOCKOPT_RCVMORE для получения сообщений состоящих из нескольких частей. Более подробно смотрите ZMQSocket::setSockOpt().

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

mode

Флаги для настройки режима не блокирующего получения и работы с сообщениями, состоящими из нескольких частей. Смотрите константы ZMQ::MODE_*.

Примеры

Пример #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)
Получен ответ: Я сообщение!

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

Возвращает сообщение. В случае ошибки выбрасывает исключение ZMQSocketException. Если используется режим ZMQ::MODE_DONTWAIT и операция заблокирована, то будет возвращено false.