(PECL zmq >= 0.5.0)
ZMQSocket::recv — Recebe uma mensagem
$mode
= 0
] )
Recebe uma mensagem a partir de um socket. Por padrão a recepção será bloqueada até que uma mensagem esteja disponível, a menos que
a constante ZMQ::MODE_NOBLOCK
seja usada. A constante ZMQ::SOCKOPT_RCVMORE
pode ser usada para receber mensagens com várias partes. Consulte ZMQSocket::setSockOpt()
para mais informações.
mode
Passa indicadores para a recepção de mensagens com várias partes ou oerações não bloqueantes.
Consulte as constantes ZMQ::MODE_*
.
Exemplo #1 A exemplo de envio/recepção
Envio / recepção não bloqueantes
<?php
/* Cria um novo objeto de enfileiramento, é necessário existir um servidor na outra ponta */
$fila = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ);
$fila->connect("tcp://127.0.0.1:5555");
/* Atribui o socket 1 à fila, envia e recebe */
$tentativas = 5;
$enviando = true;
/* Inicia um laço */
do {
try {
/* Tenta enviar / receber */
if ($enviando) {
echo "Enviando mensagem\n";
$fila->send("Isso é uma mensagem", ZMQ::MODE_NOBLOCK);
$enviando = false;
} else {
echo "Obteve resposta: " . $fila->recv(ZMQ::MODE_NOBLOCK) . "\n";
break;
}
} catch (ZMQSocketException $e) {
/* EAGAIN significa que a operação foi bloqueada, tentar novamente */
if ($e->getCode() === ZMQ::ERR_EAGAIN) {
echo " - Obteve EAGAIN, tentando novamente ($tentativas)\n";
} else {
die(" - Erro: " . $e->getMessage());
}
}
/* Dá uma pausa durante as operações */
usleep(5);
} while (--$tentativas);
?>
O exemplo acima irá imprimir algo similar à:
Enviando mensagem - Obteve EAGAIN, tentando novamente (4) Obteve resposta: Isso é uma mensagem
Retorna a mensagem. Lança uma exceção ZMQSocketException caso haja erro.
Se a constante ZMQ::MODE_NOBLOCK
for usada e operação seja
bloqueada, boolean falso é retornado.