-
Notifications
You must be signed in to change notification settings - Fork 146
/
book.xml
190 lines (161 loc) · 5.3 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
189
190
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 68c2c871505aadf983f16113c5b077b335ce8d76 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<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>
Cette extension fournit un système POSIX I/O asynchrone via
la bibliothèque C <link xlink:href="&url.eio.libeio;">libeio</link>
écrit par Marc Lehmann.
</para>
¬e.no-windows.extension;
<para>
<warning>
<simpara>
Il est important de noter que chaque demande est exécuté dans un thread,
et l'ordre d'exécution des demandes en attente n'est pas assuré.
Pour l'instant, le code suivant n'est pas correct.
</simpara>
</warning>
<example>
<title>Demandes incorrectes</title>
<programlisting role="php"><![CDATA[
<?php
// Demande la création d'un lien symbolique $filename vers $link
eio_symlink($filename, $link);
// Demande de déplacement de $filename vers $new_filename
eio_rename($filename, $new_filename);
// Exécution des demandes
eio_event_loop();
?>
]]>
</programlisting>
</example>
Dans l'exemple ci-dessus, la fonction <function>eio_rename</function>
peut se terminer avant la fonction <function>eio_symlink</function>.
Pour résoudre ce problème, vous pouvez appeler la fonction
<function>eio_rename</function> dans la fonction de rappel de la
fonction <function>eio_symlink</function>:
<example>
<title>Exécution d'une demande dans la fonction de rappel d'une autre</title>
<programlisting role="php"><![CDATA[
<?php
function my_symlink_done($filename, $result) {
// Demande de déplacement de $filename vers $new_filename
eio_rename($filename, "/path/to/new-name");
// Exécution des demandes
eio_event_loop();
}
// Demande de création d'un lien symbolique $filename vers $link
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);
// Exécution des demandes
eio_event_loop();
?>
]]>
</programlisting>
</example>
Alternativement, vous pouvez créer un groupe de demandes :
<example>
<title>Exécution d'une demande depuis la fonction de rappel d'une autre</title>
<programlisting role="php"><![CDATA[
<?php
/* Sera appelé lorsque le groupe de demandes aura terminé */
function my_grp_done($data, $result) {
// ...
}
function my_symlink_done($filename, $result) {
// Crée une demande eio_rename et l'ajoute au groupe
$req = eio_rename($filename, "/path/to/new-name");
eio_grp_add($grp, $req);
// Vous pouvez vouloir d'autres actions...
}
// Création d'un groupe de demandes
$grp = eio_grp("my_grp_done", "my_grp_data");
// Crée une demande eio_symlink et l'ajoute au groupe
// Passage de $filename à la fonction de rappel
$req = eio_symlink($filename, $link,
EIO_PRI_DEFAULT, "my_symlink_done", $filename);
eio_grp_add($grp, $req);
// Exécution des demandes
eio_event_loop();
?>
]]></programlisting>
</example>
Un groupe est une demande spéciale qui peut cumuler un jeu de
demandes <emphasis>eio</emphasis>. Ce mécanisme peut être utile pour
créer une demande complexe qui ouvre, lit et ferme un fichier.
</para>
<para>
Depuis la version 0.3.0 alpha, une variable utilisée dans les
communications internes avec libeio peut être récupérée
avec la fonction <function>eio_get_event_stream</function>. La
variable peut être utilisé pour lier une boucle d'événements
avec d'autres extensions. Vous pouvez organiser une boucle
d'événements où libeio et libevent fonctionnent ensemble :
<example>
<title>Utilisation de eio et libevent</title>
<programlisting role="php"><![CDATA[
<?php
function my_eio_poll($fd, $events, $arg) {
/* Quelques régulations libevent peuvent venir ici .. */
if (eio_nreqs()) {
eio_poll();
}
/* .. et ici */
}
function my_res_cb($d, $r) {
var_dump($r); var_dump($d);
}
$base = event_base_new();
$event = event_new();
// Ce flux est utilisé pour se lier avec 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");
/* d'autres appels eio_* ici ... */
// Définit les drapeaux des événements
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));
// Définit l'événement de base
event_base_set($event, $base);
// Active l'événement
event_add($event);
// Démarre la boucle des événements
event_base_loop($base);
/* La même chose est disponible via l'interface libevent bufferisée */
?>
]]></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
-->