PHP Conference Kansai 2025

La clase EvIo

(PECL ev >= 0.2.0)

Introducción

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.

Sinopsis de la Clase

class EvIo extends EvWatcher {
/* Propiedades */
public $fd;
public $events;
/* Propiedades heredadas */
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 heredados */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

Propiedades

fd

events

Tabla de contenidos

add a note

User Contributed Notes

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