mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-15 16:38:54 +00:00
187 lines
4.8 KiB
XML
187 lines
4.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
|
|
<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>
|
|
This extension provides asyncronous POSIX I/O by means of <link
|
|
xlink:href="&url.eio.libeio;">libeio</link> C
|
|
library written by Marc Lehmann.
|
|
</para>
|
|
|
|
¬e.no-windows.extension;
|
|
|
|
<para>
|
|
|
|
<warning>
|
|
<simpara>
|
|
It is important to be aware that each request is executed in a thread, and the
|
|
order of execution of continuously queued requests basically is
|
|
unpredictable. For instance, the following piece of code is incorrect.
|
|
</simpara>
|
|
</warning>
|
|
|
|
<example>
|
|
<title>Incorrect requests</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
// Request to create symlink of $filename to $link
|
|
eio_symlink($filename, $link);
|
|
|
|
// Request to move $filename to $new_filename
|
|
eio_rename($filename, $new_filename);
|
|
|
|
// Process requests
|
|
eio_event_loop();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
In the example above <function>eio_rename</function> request may finish
|
|
before <function>eio_symlink</function>. To fix it you might call <function>eio_rename</function>
|
|
in the callback of <function>eio_symlink</function>:
|
|
<example>
|
|
<title>Calling request from a request callback</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
function my_symlink_done($filename, $result) {
|
|
// Request to move $filename to $new_filename
|
|
eio_rename($filename, "/path/to/new-name");
|
|
|
|
// Process requests
|
|
eio_event_loop();
|
|
}
|
|
|
|
// Request to create symlink of $filename to $link
|
|
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);
|
|
|
|
// Process requests
|
|
eio_event_loop();
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
Alternatively, you might want to create a request group:
|
|
|
|
<example>
|
|
<title>Calling request from a request callback</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
/* Is called when the group requests are done */
|
|
function my_grp_done($data, $result) {
|
|
// ...
|
|
}
|
|
|
|
function my_symlink_done($filename, $result) {
|
|
// Create eio_rename request and add it to the group
|
|
$req = eio_rename($filename, "/path/to/new-name");
|
|
eio_grp_add($grp, $req);
|
|
// You might want to add more requests...
|
|
}
|
|
|
|
// Create a request group
|
|
$grp = eio_grp("my_grp_done", "my_grp_data");
|
|
|
|
// Create eio_symlink request and add it to the group
|
|
// Pass $filename to the callback
|
|
$req = eio_symlink($filename, $link,
|
|
EIO_PRI_DEFAULT, "my_symlink_done", $filename);
|
|
eio_grp_add($grp, $req);
|
|
|
|
// Process requests
|
|
eio_event_loop();
|
|
?>
|
|
]]></programlisting>
|
|
</example>
|
|
|
|
Group is a special kind of request that could accumulate a set of regular
|
|
<emphasis>eio</emphasis> requests. This could be used to create a complex
|
|
request that opens, reads and closes a file.
|
|
</para>
|
|
<para>
|
|
Since version 0.3.0 alpha, a variable used in communications with libeio
|
|
internally, could be retrieved with
|
|
<function>eio_get_event_stream</function>. The variable could be used
|
|
to bind to an event loop supported by some other extension. You might
|
|
organize a simple event loop where eio and libevent work together:
|
|
<example>
|
|
<title>Using eio with libevent</title>
|
|
<programlisting role="php"><![CDATA[
|
|
<?php
|
|
function my_eio_poll($fd, $events, $arg) {
|
|
/* Some libevent regulation might go here .. */
|
|
if (eio_nreqs()) {
|
|
eio_poll();
|
|
}
|
|
/* .. and here */
|
|
}
|
|
|
|
function my_res_cb($d, $r) {
|
|
var_dump($r); var_dump($d);
|
|
}
|
|
|
|
$base = event_base_new();
|
|
$event = event_new();
|
|
|
|
// This stream is used to bind with 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");
|
|
/* some other eio_* calls here ... */
|
|
|
|
|
|
// set event flags
|
|
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));
|
|
|
|
// set event base
|
|
event_base_set($event, $base);
|
|
|
|
// enable event
|
|
event_add($event);
|
|
|
|
// start event loop
|
|
event_base_loop($base);
|
|
|
|
/* The same will be available via buffered libevent interface */
|
|
?>
|
|
]]></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
|
|
-->
|