Introdução

Esta extensão fornece E/S POSIX assíncrona por meio da biblioteca C » libeio escrita por Marc Lehmann.

Note: Esta extensão não está disponível em plataformas Windows.

Warning

É importante estar ciente de que cada solicitação é executada em um thread e a ordem de execução das solicitações enfileiradas continuamente é basicamente imprevisível. Por exemplo, o trecho de código a seguir está incorreto.

Example #1 Requisições incorretas

<?php
// Solicitação para criar link simbólico de $filename para $link
eio_symlink($filename, $link);

// Solicitação para mover $filename para $new_filename
eio_rename($filename, $new_filename);

// Processa solicitações
eio_event_loop();
?>
No exemplo acima a solicitação eio_rename() pode terminar antes de eio_symlink(). Para corrigir, pode-se chamar eio_rename() na função de retorno de eio_symlink():

Example #2 Chamando solicitação de uma chamada de solicitação

<?php
function my_symlink_done($filename, $result) {
 // Solicitação para mover $filename para $new_filename
 eio_rename($filename, "/path/to/new-name");

 // Processa solicitações
 eio_event_loop();
}

// Solicitação para criar ligação simbólica de $filename para $link
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);

// Processa solicitações
eio_event_loop();
?>
Alternativamente, pode-se criar um grupo de solicitações:

Example #3 Chamando solicitação de uma chamada de solicitação

<?php
/* É chamado quando as solicitações do grupo são concluídas */
function my_grp_done($data, $result) {
 // ...
}

function my_symlink_done($filename, $result) {
 // Cria a solicitação eio_rename e adiciona-a ao grupo
 $req = eio_rename($filename, "/path/to/new-name");
 eio_grp_add($grp, $req);
 // Pode-se adicionar mais solicitações...
}

// Cria um grupo de solicitações
$grp = eio_grp("my_grp_done", "my_grp_data");

// Cria a solicitação eio_symlink e adiciona-a ao grupo
// Passa $filename para o retorno de chamada
$req = eio_symlink($filename, $link,
  EIO_PRI_DEFAULT, "my_symlink_done", $filename);
eio_grp_add($grp, $req);

// Processa solicitações
eio_event_loop();
?>
Grupo é um tipo especial de solicitação que pode acumular um conjunto de solicitações eio regulares. Isso poderia ser usado para criar uma solicitação complexa que abre, lê e fecha um arquivo.

Desde a versão 0.3.0 alpha, uma variável usada internamente nas comunicações com o l ibeio, poderia ser recuperada com eio_get_event_stream(). A variável poderia ser usada p ara vincular a um loop de eventos suportado por alguma outra extensão. Pode-se organizar um loop de eventos simples onde eio e libevent trabalhem juntos:

Example #4 Usando eio com libevent

<?php
function my_eio_poll($fd, $events, $arg) {
    /* Algum regulamento do libevent pode estar aqui.. */
    if (eio_nreqs()) {
        eio_poll();
    }
    /* .. e aqui */
}

function my_res_cb($d, $r) {
    var_dump($r); var_dump($d);
}

$base = event_base_new();
$event = event_new();

// Este stream é usado para vincular com libevent
$fd = eio_get_event_stream();

eio_nop(EIO_PRI_DEFAULT, "my_res_cb", "nop data");
eio_mkdir("/tmp/abc-eio-temp", 0750, EIO_PRI_DEFAULT, "my_res_cb", "mkdir data");
/* algumas outras chamadas eio_* aqui... */


// define opções de evento
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));

// define a base de eventos
event_base_set($event, $base);

// habilita evento
event_add($event);

// inicia loop de eventos
event_base_loop($base);

/* O mesmo estará disponível através da interface libevent em buffer */
?>