(PECL ev >= 0.2.0)
Los observadores EvIo verifican si un descriptor de fichero (o un socket, o un flujo que pueda ser convertido en descriptor de fichero numérico) está disponible para lectura o escritura en cada iteración del bucle de eventos, o, más precisamente, cuando la lectura no va a bloquear el proceso, y cuando la escritura va a permitir escribir datos. Este comportamiento se denomina nivel de activación porque los eventos se mantienen mientras persista la condición. Para detener la recepción de eventos, simplemente se debe detener el observador.
    El número de eventos de lectura/escritura de los observadores por
    fd es ilimitado. Establecer todos los
    descriptores de ficheros en modo no bloqueante es generalmente
    una buena idea (aunque no es obligatorio).
   
    Otra cosa a tener en cuenta es que es muy fácil recibir
    notificaciones falsas de sistema listo para lectura, es decir, la función
    de retrollamada puede ser llamada con Ev::READ
    pero una subsiguiente read() puede bloquearse
    debido a que no hay datos. Es muy simple
    encontrarse en esta situación. Por lo tanto, se recomienda siempre
    utilizar I/O no bloqueante: una read()
    adicional que devuelva EAGAIN (o similar)
    es preferible a un programa que espera la llegada de datos.
   
    Si por alguna razón no es posible ejecutar el
    fd en modo no bloqueante, entonces, por separado,
    se debe volver a verificar si el descriptor de fichero está realmente listo.
    Algunos usuarios utilizan además SIGALRM
    y un temporizador de intervalo, solo para asegurarse de que no haya
    bloqueos infinitos.
   
Se recomienda siempre utilizar el modo no bloqueante.
$fd
   ,$events
   ,$callback
   ,$data
    = ?,$priority
    = ?$fd
   ,$events
   ,$callback
   ,$data
     = null
   ,$priority
     = 0
   