CakeFest 2024: The Official CakePHP Conference

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

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

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top