1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-23 23:12:09 +01:00
Files
archived-doc-es/reference/eio/book.xml
2026-01-25 15:48:25 +00:00

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>
&note.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
-->