Eio
PHP Manual

Introducción

Esta extensión proporciona E/S POSIX asíncrona a través de la biblioteca de C » libeio escrita por Marc Lehmann.

Nota: Esta extensión no está disponible en plataformas Windows.

Advertencia

Es importante ser consciente de que cada petición es ejecutada en un hilo, y el orden de ejecución continua de peticiones en cola es basicamente impredecible. Por ejemplo, el siguiente trozo de código es incorrecto.

Ejemplo #1 Incorrect requests

<?php
// Petición para crear un enlace simbólico de $nombre_archivo a $enlace
eio_symlink($nombre_archivo$enlace);

// Petición para mover $nombre_archivo a $nuevo_nombre_archivo
eio_rename($nombre_archivo$nuevo_nombre_archivo);

// Procesar las peticiones
eio_event_loop();
?>
En el ejemplo de arriba la petición eio_rename() puede finalizar antes que eio_symlink(). Para corregirlo se podría llamar a eio_rename() en la llamada de retorno de eio_symlink():

Ejemplo #2 Llamar a una petición desde una llamada de retorno de petición

<?php
function mi_enlace_simbólico_hecho($nombre_archivo$resultado) {
 
// Petición para mover $nombre_archivo a $nuevo_nombre_archivo
 
eio_rename($nombre_archivo"/ruta/a/nuevo-nombre");

 
// Procesar las peticiones
 
eio_event_loop();
}

// Petición para crear un enlace simbólico de $nombre_archivo a $enlace
eio_symlink($nombre_archivo$enlaceEIO_PRI_DEFAULT"mi_enlace_simbólico_hecho"$nombre_archivo);

 
// Procesar las peticiones
eio_event_loop();
?>
Alternativamente, podría querer crear un grupo de peticiones:

Ejemplo #3 Llamar a una petición desde una llamada de retorno de petición

<?php
/* Se llama cuando el grupo de peticiones está hecho */
function mi_grupo_hecho($data$resultado) {
 
// ...
}

function 
mi_enlace_simbólico_hecho($nombre_archivo$resultado) {
 
// Crear una petición eio_rename y añadirla al grupo
 
$petición eio_rename($nombre_archivo"/ruta/a/nuevo-nombre");
 
eio_grp_add($grupo$petición);
 
// Podría querer añadir más peticiones...
}

// Crear un grupo de peticiones
$grupo eio_grp("mi_grupo_hecho""mis_datos_de_grupo");

// Crear una petición eio_symlink y añadirla al grupo
// Pasar $nombre_archivo a la llamada de retorno
$petición eio_symlink($nombre_archivo$enlace,
  
EIO_PRI_DEFAULT"mi_enlace_simbólico_hecho"$nombre_archivo);
eio_grp_add($grupo$petición);

 
// Procesar las peticiones
eio_event_loop();
?>
El grupo es un tipo especial de peticion que podría acumular un conjunto de peticiones eio regulares. Se podría usar para crear una petición compleja para abrir, leer y cerrar un fichero.

Desde la versión 0.3.0 alfa, una variable usada internamete en las comunicaciones con libeio, podía ser recuperada con eio_get_event_stream(). La variable se podría usar para vincularse a un bucle de eventos soportado por alguna otra extensión. Se podría organizar un sencillo bucle de eventos donde eio y libevent trabajaran juntos:

Ejemplo #4 Usar eio con libevent

<?php
function mi_eio_poll($df$eventos$argumentos) {
    
/* Algunas regulaciones de libevent podrían ir aquí .. */
    
if (eio_nreqs()) {
        
eio_poll();
    }
    
/* .. y aquí */
}

function 
mi_res_cb($d$r) {
    
var_dump($r); var_dump($d);
}

$base event_base_new();
$evento event_new();

// Este flujo se usa para vincularse con libevent
$df eio_get_event_stream();

eio_nop(EIO_PRI_DEFAULT"mi_res_cb""nop data");
eio_mkdir("/tmp/abc-eio-temp"0750EIO_PRI_DEFAULT"mi_res_cb""mkdir data");
/* algunas llamadas eio_* aquí ... */


// establecer las banderas del evento
event_set($evento$dfEV_READ /*| EV_PERSIST*/"mi_eio_poll", array($evento$base));

// Establecer la base del evento
event_base_set($evento$base);

// habilitar el evento
event_add($evento);

// iniciar el bucle de eventos
event_base_loop($base);

/* Lo mismo estará disponible mediante interfaz libevent con buffer */
?>


Eio
PHP Manual