CascadiaPHP 2024

A classe EvIo

(PECL ev >= 0.2.0)

Introdução

Os observadores EvIo verificam se um descritor de arquivo (ou socket, ou um fluxo convertível em descritor de arquivo numérico) é legível ou gravável em cada iteração do loop de eventos, ou, mais precisamente, quando a leitura não bloquearia o processo e escrita seriam pelo menos capazes de gravar alguns dados. Esse comportamento é chamado de acionamento de nível porque os eventos continuam sendo recebidos enquanto a condição persistir. Para parar de receber eventos, basta parar o observador.

O número de observadores de eventos de leitura e/ou gravação por fd é ilimitado. Definir todos os descritores de arquivo para o modo sem bloqueio também costuma ser uma boa ideia (mas não é obrigatório).

Outra coisa a observar é que é muito fácil receber falsas notificações de prontidão, ou seja, o retorno de chamada pode ser chamado com Ev::READ mas um read() subsequente irá na verdade, bloquear porque não há dados. É muito fácil entrar nesta situação. Portanto, é melhor sempre usar E/S sem bloqueio: Um read() extra retornando EAGAIN (ou similar) é muito preferível a um programa suspenso até que alguns dados cheguem.

Se por algum motivo for impossível executar o fd no modo sem bloqueio, teste novamente separadamente se um descritor de arquivo está realmente pronto. Algumas pessoas usam SIGALRM e um temporizador de intervalo, apenas para ter certeza de que o thry não bloqueará infinitamente.

Sempre considere usar o modo sem bloqueio.

Resumo da classe

class EvIo extends EvWatcher {
/* Propriedades */
public $fd;
public $events;
/* Propriedades herdadas */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* Métodos */
public __construct(
     mixed $fd ,
     int $events ,
     callable $callback ,
     mixed $data = ?,
     int $priority = ?
)
final public static createStopped(
     mixed $fd ,
     int $events ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
): EvIo
public set( mixed $fd , int $events ): void
/* Métodos herdados */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

Propriedades

fd

events

Índice

add a note

User Contributed Notes

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