(PECL ev >= 0.2.0)
Os observadores EvIo verificam se um descritor de arquivo (ou soquete, ou um fluxo convertível em descritor de arquivo numérico) pode ser lido ou escrito em cada iteração do laço de eventos, ou, mais precisamente, quando a leitura não bloquearia o processo e a escrita seria pelo menos capaz 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
   