Files
archived-doc-pt-br/reference/eio/book.xml
Leonardo Lara Rodrigues 4baf074b52 sync file lines with en rev
2026-01-27 09:14:27 -03:00

185 lines
5.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4e53894013ec0d223e2723ece46447ba00d5baf5 Maintainer: fernandowobeto Status: ready --><!-- CREDITS: fernandowobeto -->
<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 extensão fornece E/S POSIX assíncrona por meio da biblioteca C <link xlink:href="&url.eio.libeio;">libeio</link>
escrita por Marc Lehmann.
</simpara>
&note.no-windows.extension;
<para>
<warning>
<simpara>
É importante estar ciente de que cada solicitação é executada em um thread e a
ordem de execução das solicitações enfileiradas continuamente é basicamente
imprevisível. Por exemplo, o trecho de código a seguir está incorreto.
</simpara>
</warning>
<example>
<title>Requisições incorretas</title>
<programlisting role="php"><![CDATA[
<?php
// Solicitação para criar link simbólico de $filename para $link
eio_symlink($filename, $link);
// Solicitação para mover $filename para $new_filename
eio_rename($filename, $new_filename);
// Processa solicitações
eio_event_loop();
?>
]]>
</programlisting>
</example>
No exemplo acima a solicitação <function>eio_rename</function> pode terminar
antes de <function>eio_symlink</function>. Para corrigir, pode-se chamar <function>eio_rename</function>
na função de retorno de <function>eio_symlink</function>:
<example>
<title>Chamando solicitação de uma chamada de solicitação</title>
<programlisting role="php"><![CDATA[
<?php
function my_symlink_done($filename, $result) {
// Solicitação para mover $filename para $new_filename
eio_rename($filename, "/path/to/new-name");
// Processa solicitações
eio_event_loop();
}
// Solicitação para criar ligação simbólica de $filename para $link
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);
// Processa solicitações
eio_event_loop();
?>
]]>
</programlisting>
</example>
Alternativamente, pode-se criar um grupo de solicitações:
<example>
<title>Chamando solicitação de uma chamada de solicitação</title>
<programlisting role="php"><![CDATA[
<?php
/* É chamado quando as solicitações do grupo são concluídas */
function my_grp_done($data, $result) {
// ...
}
function my_symlink_done($filename, $result) {
// Cria a solicitação eio_rename e adiciona-a ao grupo
$req = eio_rename($filename, "/path/to/new-name");
eio_grp_add($grp, $req);
// Pode-se adicionar mais solicitações...
}
// Cria um grupo de solicitações
$grp = eio_grp("my_grp_done", "my_grp_data");
// Cria a solicitação eio_symlink e adiciona-a ao grupo
// Passa $filename para o retorno de chamada
$req = eio_symlink($filename, $link,
EIO_PRI_DEFAULT, "my_symlink_done", $filename);
eio_grp_add($grp, $req);
// Processa solicitações
eio_event_loop();
?>
]]></programlisting>
</example>
Grupo é um tipo especial de solicitação que pode acumular um conjunto de solicitações
<emphasis>eio</emphasis> regulares. Isso poderia ser usado para criar uma solicitação complexa
que abre, lê e fecha um arquivo.
</para>
<para>
Desde a versão 0.3.0 alpha, uma variável usada internamente nas comunicações com o l
ibeio, poderia ser recuperada com
<function>eio_get_event_stream</function>. A variável poderia ser usada p
ara vincular a um loop de eventos suportado por alguma outra extensão. Pode-se
organizar um loop de eventos simples onde eio e libevent trabalhem juntos:
<example>
<title>Usando eio com libevent</title>
<programlisting role="php"><![CDATA[
<?php
function my_eio_poll($fd, $events, $arg) {
/* Algum regulamento do libevent pode estar aqui.. */
if (eio_nreqs()) {
eio_poll();
}
/* .. e aqui */
}
function my_res_cb($d, $r) {
var_dump($r); var_dump($d);
}
$base = event_base_new();
$event = event_new();
// Este fluxo é usado para vincular com 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");
/* algumas outras chamadas eio_* aqui... */
// define opções de evento
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));
// define a base de eventos
event_base_set($event, $base);
// habilita evento
event_add($event);
// inicia loop de eventos
event_base_loop($base);
/* O mesmo estará disponível através da interface libevent em 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
-->