mirror of
https://github.com/php/doc-es.git
synced 2026-03-23 23:12:09 +01:00
187 lines
5.5 KiB
XML
187 lines
5.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 4e53894013ec0d223e2723ece46447ba00d5baf5 Maintainer: seros Status: ready -->
|
|
<!-- Reviewed: no Maintainer: andresdzphp -->
|
|
<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="book.eio">
|
|
<?phpdoc extension-membership="pecl" ?>
|
|
<title>Eio</title>
|
|
<titleabbrev>Eio</titleabbrev>
|
|
<!--{{{ preface -->
|
|
<preface xml:id="intro.eio">
|
|
&reftitle.intro;
|
|
<simpara>
|
|
Esta extensión proporciona E/S POSIX asíncrona a través de
|
|
la biblioteca de C <link xlink:href="&url.eio.libeio;">libeio</link>
|
|
escrita por Marc Lehmann.
|
|
</simpara>
|
|
|
|
¬e.no-windows.extension;
|
|
|
|
<para>
|
|
|
|
<warning>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
</warning>
|
|
|
|
<example>
|
|
<title>Incorrect requests</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?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();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
En el ejemplo de arriba la petición <function>eio_rename</function> puede finalizar
|
|
antes que <function>eio_symlink</function>. Para corregirlo se podría llamar a <function>eio_rename</function>
|
|
en la llamada de retorno de <function>eio_symlink</function>:
|
|
<example>
|
|
<title>Llamar a una petición desde una llamada de retorno de petición</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?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();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
Alternativamente, podría querer crear un grupo de peticiones:
|
|
|
|
<example>
|
|
<title>Llamar a una petición desde una llamada de retorno de petición</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?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();
|
|
?>
|
|
]]></programlisting>
|
|
</example>
|
|
|
|
El grupo es un tipo especial de peticion que podría acumular un conjunto de peticiones
|
|
<emphasis>eio</emphasis> regulares. Se podría usar para crear una petición
|
|
compleja para abrir, leer y cerrar un fichero.
|
|
</para>
|
|
<para>
|
|
Desde la versión 0.3.0 alfa, una variable usada internamete en las comunicaciones con
|
|
libeio, podía ser recuperada con
|
|
<function>eio_get_event_stream</function>. 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:
|
|
<example>
|
|
<title>Usar eio con libevent</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?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 */
|
|
?>
|
|
]]></programlisting>
|
|
</example>
|
|
|
|
</para>
|
|
</preface>
|
|
<!--}}}-->
|
|
&reference.eio.setup;
|
|
&reference.eio.constants;
|
|
&reference.eio.examples;
|
|
&reference.eio.reference;
|
|
|
|
</book>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml fdm=marker
|
|
vi: ts=1 sw=1
|
|
-->
|