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.
Es importante tener en cuenta que cada solicitud se ejecuta 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();
?>
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, $enlace, EIO_PRI_DEFAULT, "mi_enlace_simbólico_hecho", $nombre_archivo);
// Procesar las peticiones
eio_event_loop();
?>
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();
?>
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", 0750, EIO_PRI_DEFAULT, "mi_res_cb", "mkdir data");
/* algunas llamadas eio_* aquí ... */
// establecer las banderas del evento
event_set($evento, $df, EV_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 */
?>