(PECL zmq >= 0.5.0)
ZMQPoll::poll — Consulta os itens
Consulta os itens na lista de pesquisa atual. Os itens de leitura e escrita são retornados nos
parâmetros readable
e writable
.
A função ZMQPoll::getLastErrors() pode ser usada para verificar se houveram erros.
readable
Um array (vetor) onde os ZMQSockets de leitura ou recursos de fluxo (streams) PHP são retornados. O array será esvaziado no início da operação.
writable
Um array (vetor) onde os ZMQSockets de escrita ou recursos de fluxo (streams) PHP são retornados. O array será esvaziado no início da operação.
timeout
O tempo limite de execução da operação. -1 significa que a pesquisa espera até pelo menos um item entre em atividade. Note que a partir da versão 1.0.0 o tempo limite de consulta é definido em milissegundos, em vez de microsegundos.
Retorna um inteiro representando a quantidade de itens com atividades.
Lança um ZMQPollException em caso de erros.
Exemplo #1 Um exemplo de ZMQPoll()
Cria um servidor de consulta simples
<?php
/* Cria um socket, padrão requisição-resposta (socket de resposta) */
$contexto = new ZMQContext();
$servidor = $contexto->getSocket(ZMQ::SOCKET_REP);
/* Associa à porta 5555 em 127.0.0.1 */
$servidor->bind("tcp://127.0.0.1:5555");
/* Cria uma nova lista de consulta para mensagens de entrada/saída */
$consulta = new ZMQPoll();
/* Adiciona o objeto e espera por consultas de entrada/saída */
$id = $consulta->add($servidor, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo "Adicionou o objeto com id " . $id . "\n";
/* Inicializa os arrays de leitura e escrita */
$leitura = array();
$escrita = array();
while (true) {
/* Quantidade de eventos recuperados */
$eventos = 0;
try {
/* Pesquisa até que haja algo a ser feito */
$eventos = $consulta->poll($leitura, $escrita, -1);
$erros = $consulta->getLastErrors();
if (count($erros) > 0) {
foreach ($erros as $erro) {
echo "Erro ao consultar objeto " . $erro . "\n";
}
}
} catch (ZMQPollException $e) {
echo "A pesquisa falhou: " . $e->getMessage() . "\n";
}
if ($eventos > 0) {
/* Itera através dos objetos de leitura e mensagens recebidas */
foreach ($leitura as $le) {
try {
echo "Mensagem recebida: " . $le->recv() . "\n";
} catch (ZMQException $e) {
echo "o método recv falhou: " . $e->getMessage() . "\n";
}
}
/* Itera através dos objetos de escrita e das mensagens enviada */
foreach ($escrita as $es) {
try {
$es->send("Recebido!");
} catch (ZMQException $e) {
echo "o método send falhou: " . $e->getMessage() . "\n";
}
}
}
}
?>