1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
archived-doc-fr/reference/eio/book.xml
2026-03-10 19:04:42 +01:00

189 lines
5.3 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4e53894013ec0d223e2723ece46447ba00d5baf5 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<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>
Cette extension fournit un système POSIX I/O asynchrone via
la bibliothèque C <link xlink:href="&url.eio.libeio;">libeio</link>
écrite par Marc Lehmann.
</simpara>
&note.no-windows.extension;
<para>
<warning>
<simpara>
Il est important de noter que chaque demande est exécutée 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, il est possible d'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, il est possible de 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>
À partir de 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ée pour lier une boucle d'événements
avec d'autres extensions. Il est possible d'organiser une boucle
d'événements où libeio et libevent fonctionnent ensemble :
<example>
<title>Utilisation d'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
-->