(PECL ev >= 0.2.0)
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.
$fd
,$events
,$callback
,$data
= ?,$priority
= ?$fd
,$events
,$callback
,$data
= null
,$priority
= 0