/
book.xml
188 lines (157 loc) · 5.49 KB
/
book.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 68c2c871505aadf983f16113c5b077b335ce8d76 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<book xml:id="book.eio" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<?phpdoc extension-membership="pecl" ?>
<title>Eio</title>
<titleabbrev>Eio</titleabbrev>
<!--{{{ preface -->
<preface xml:id="intro.eio">
&reftitle.intro;
<para>
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.
</para>
¬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
-->