ZMQPoll::poll

(PECL zmq >= 0.5.0)

ZMQPoll::pollConsulta os itens

Descrição

public ZMQPoll::poll(array &$readable, array &$writable, int $timeout = -1): int

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.

Parâmetros

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.

Valor Retornado

Retorna um inteiro representando a quantidade de itens com atividades.

Erros/Exceções

Lança um ZMQPollException em caso de erros.

Exemplos

Example #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";
           }
       }
   }
}
?>