(PECL zmq >= 0.5.0)
ZMQSocket::recv — Recibir un mensaje
$mode
= 0
] ) : string
Recibe un mensaje de un socket. Por defecto, la recepción quedará en espera hasta que haya disponible un mensaje, a menos
que se emplee la bandera ZMQ::MODE_DONTWAIT
. Se puede emplear la opción de socket
ZMQ::SOCKOPT_RCVMORE
para recibir mensajes multiparte. Véase ZMQSocket::setSockOpt()
para más información.
mode
Proporcionar banderas de modo para recibir mensajes multiparte o hacer que la operación no quede en espera.
Véanse las constantes ZMQ::MODE_*
.
Ejemplo #1 Un ejemplo de send/recv
Envío / respuesta sin esperas
<?php
/* Crear un nuevo objeto cola, debe existir un servidor en el otro extremo */
$cola = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);
$cola->connect("tcp://127.0.0.1:5555");
/* Asginar el socket 1 a la cola, enviar y recibir */
$reintentos = 5;
$sending = true;
/* Iniciar y recorrer */
do {
try {
/* Intentar enviar / recibir */
if ($sending) {
echo "Enviando el mensaje\n";
$cola->send("Este es un mensaje", ZMQ::MODE_DONTWAIT);
$sending = false;
} else {
echo "Respuesta obtenida: " . $cola->recv(ZMQ::MODE_DONTWAIT) . "\n";
break;
}
} catch (ZMQSocketException $e) {
/* EAGAIN significa que la operación tendrá que esperar, reintentar */
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
echo " - EAGAIN, reintentando ($reintentos)\n";
} else {
die(" - Error: " . $e->getMessage());
}
}
/* Dormir un poco entre operaciones */
usleep(5);
} while (--$reintentos);
?>
El resultado del ejemplo sería algo similar a:
Enviando el mensaje - Unable to execute operation, retrying (4) Respuesta obtenida: Este es un mensaje
Devuelve el mensaje. Lanza una ZMQSocketException en caso de error.
Si se emplea ZMQ::MODE_DONTWAIT
y la operación debería quedar
en espera, se devolverá el boolean false.