(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");
$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) {
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
echo " - Получили EAGAIN, повторяем ($retries)\n";
} else {
die(" - Ошибка: " . $e->getMessage());
}
}
usleep(5);
} while (--$retries);
?>
Вывод приведённого примера будет похож на:
Отправляем сообщение - Получили EAGAIN, повторяем (4) Получен ответ: Я сообщение!