1
0
mirror of https://github.com/php/doc-ru.git synced 2026-04-26 00:38:06 +02:00
Files
archived-doc-ru/reference/event/eventbufferevent.xml
T
2024-06-18 17:37:56 +03:00

407 lines
15 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4d17b7b4947e7819ff5036715dd706be87ae4def Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="class.eventbufferevent" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>Класс EventBufferEvent</title>
<titleabbrev>EventBufferEvent</titleabbrev>
<partintro>
<!-- {{{ EventBufferEvent intro -->
<section xml:id="eventbufferevent.intro">
&reftitle.intro;
<para>
Класс представляет буферизированное событие Libevent.
</para>
<para>
Обычно приложению необходимо произвести буферизацию некоторого
количества данных в дополнение к тому, чтобы просто реагировать
на события. Когда, например, необходимо записывать данные, обычный алгоритм
выглядит так:
</para>
<orderedlist>
<listitem>
<para>
Решается, что требуется записать данные в соединение; данные складываются
в буфер
</para>
</listitem>
<listitem>
<para>
Ожидается, когда соединение станет доступным для записи
</para>
</listitem>
<listitem>
<para>
Записывается столько данных, сколько можно
</para>
</listitem>
<listitem>
<para>
Запоминается, сколько данных записалось и, если остались недозаписанные данные,
выжидается, когда соединение снова станет доступно для записи.
</para>
</listitem>
</orderedlist>
<para>
Это шаблон буферизированного ввода-вывода настолько распространён, что
Libevent предоставляет встроенный механизм для него.
«Буферизированное событие» состоит из транспорта (например, сокета),
буфера чтения и буфера записи. В отличие от стандартных событий, которые
используют callback-функцию, когда транспорт становится доступен для
чтения или записи, буферизованное событие вызывает функцию обратного
вызова тогда, когда прочитает или запишет достаточное количество данных.
</para>
</section>
<!-- }}} -->
<section xml:id="eventbufferevent.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis>
<ooclass>
<classname>EventBufferEvent</classname>
</ooclass>
<!-- {{{ Class synopsis -->
<classsynopsisinfo>
<ooclass>
<modifier>final</modifier>
<classname>EventBufferEvent</classname>
</ooclass>
</classsynopsisinfo>
<!-- }}} -->
<classsynopsisinfo role="comment">&Constants;</classsynopsisinfo>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.reading">EventBufferEvent::READING</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.writing">EventBufferEvent::WRITING</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.eof">EventBufferEvent::EOF</varname>
<initializer>16</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.error">EventBufferEvent::ERROR</varname>
<initializer>32</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.timeout">EventBufferEvent::TIMEOUT</varname>
<initializer>64</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.connected">EventBufferEvent::CONNECTED</varname>
<initializer>128</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.opt-close-on-free">EventBufferEvent::OPT_CLOSE_ON_FREE</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.opt-threadsafe">EventBufferEvent::OPT_THREADSAFE</varname>
<initializer>2</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.opt-defer-callbacks">EventBufferEvent::OPT_DEFER_CALLBACKS</varname>
<initializer>4</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.opt-unlock-callbacks">EventBufferEvent::OPT_UNLOCK_CALLBACKS</varname>
<initializer>8</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.ssl-open">EventBufferEvent::SSL_OPEN</varname>
<initializer>0</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.ssl-connecting">EventBufferEvent::SSL_CONNECTING</varname>
<initializer>1</initializer>
</fieldsynopsis>
<fieldsynopsis>
<modifier>const</modifier>
<type>int</type>
<varname linkend="eventbufferevent.constants.ssl-accepting">EventBufferEvent::SSL_ACCEPTING</varname>
<initializer>2</initializer>
</fieldsynopsis>
<classsynopsisinfo role="comment">&Properties;</classsynopsisinfo>
<fieldsynopsis>
<modifier>public</modifier>
<type>int</type>
<varname linkend="eventbufferevent.props.fd">fd</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>public</modifier>
<type>int</type>
<varname linkend="eventbufferevent.props.priority">priority</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>public</modifier>
<modifier>readonly</modifier>
<type>EventBuffer</type>
<varname linkend="eventbufferevent.props.input">input</varname>
</fieldsynopsis>
<fieldsynopsis>
<modifier>public</modifier>
<modifier>readonly</modifier>
<type>EventBuffer</type>
<varname linkend="eventbufferevent.props.output">output</varname>
</fieldsynopsis>
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.eventbufferevent')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
</classsynopsis>
<!-- }}} -->
</section>
<!-- {{{ EventBufferEvent properties -->
<section xml:id="eventbufferevent.props">
&reftitle.properties;
<variablelist>
<varlistentry xml:id="eventbufferevent.props.fd">
<term>
<varname>fd</varname>
</term>
<listitem>
<para>
Числовой файловый дескриптор, который связан с событием буфера.
Обычно представляет связанный сокет. Дескриптор равен &null;, если
с событием буфера не связан файловый дескриптор (сокет).
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.props.priority">
<term>
<varname>priority</varname>
</term>
<listitem>
<para>
Приоритет событий, используемых для реализации события буфера.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.props.input">
<term>
<varname>input</varname>
</term>
<listitem>
<para>
Нижележащий объект входящего буфера (
<classname>EventBuffer</classname>
)
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.props.output">
<term>
<varname>output</varname>
</term>
<listitem>
<para>
Нижележащий объект исходящего буфера (
<classname>EventBuffer</classname>
)
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- }}} -->
<!-- {{{ EventBufferEvent constants -->
<section xml:id="eventbufferevent.constants">
&reftitle.constants;
<variablelist>
<varlistentry xml:id="eventbufferevent.constants.reading">
<term>
<constant>EventBufferEvent::READING</constant>
</term>
<listitem>
<para>
Событие произошло в момент операции чтения из bufferevent. Проверьте
другие флаги для этого события.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.writing">
<term>
<constant>EventBufferEvent::WRITING</constant>
</term>
<listitem>
<para>
Событие произошло в момент операции записи в bufferevent. Проверьте
другие флаги для этого события.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.eof">
<term>
<constant>EventBufferEvent::EOF</constant>
</term>
<listitem>
<para>
Получен признак конца файла для буферизированного события.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.error">
<term>
<constant>EventBufferEvent::ERROR</constant>
</term>
<listitem>
<para>
Произошла ошибка во время операции с bufferevent. Подробную информацию
об ошибке можно получить с помощью методов
<methodname>EventUtil::getLastSocketErrno</methodname>
и/или
<methodname>EventUtil::getLastSocketError</methodname>
.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.timeout">
<term>
<constant>EventBufferEvent::TIMEOUT</constant>
</term>
<listitem>
<para></para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.connected">
<term>
<constant>EventBufferEvent::CONNECTED</constant>
</term>
<listitem>
<para>
Запрошенное соединение с bufferevent установлено.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.opt-close-on-free">
<term>
<constant>EventBufferEvent::OPT_CLOSE_ON_FREE</constant>
</term>
<listitem>
<para>
Закрыть нижележащий транспорт, когда объект буферизированного
события уничтожен. Будет закрыт сокет, уничтожен буфер и т.д.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.opt-threadsafe">
<term>
<constant>EventBufferEvent::OPT_THREADSAFE</constant>
</term>
<listitem>
<para>
Автоматически размещать блокировки для bufferevent, что позволяет
безопасно использовать многопоточность.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.opt-defer-callbacks">
<term>
<constant>EventBufferEvent::OPT_DEFER_CALLBACKS</constant>
</term>
<listitem>
<para>
Когда флаг установлен, bufferevent откладывает все свои функции обратного вызова.
Смотрите <link
xlink:href="http://www.wangafu.net/~nickm/libevent-book/Ref6_bufferevent.html#_deferred_callbacks">Быстрое, переносимое, неблокирующее сетевое программирование с Libevent и отложенными функциями обратного вызова (Deferred callbacks)</link>
.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.opt-unlock-callbacks">
<term>
<constant>EventBufferEvent::OPT_UNLOCK_CALLBACKS</constant>
</term>
<listitem>
<para>
По умолчанию, когда bufferevent настроен как потокобезопасный, для
буферизированного события будут сохраняться блокировки при запуске
любых пользовательских функций обратного вызова.
Установка этого флага говорит Libevent убирать блокировки при вызове
этих callback-функций.
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.ssl-open">
<term>
<constant>EventBufferEvent::SSL_OPEN</constant>
</term>
<listitem>
<para>
Подтверждение SSL завершено
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.ssl-connecting">
<term>
<constant>EventBufferEvent::SSL_CONNECTING</constant>
</term>
<listitem>
<para>
В текущий момент SSL участвует в установлении соединения как клиент
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="eventbufferevent.constants.ssl-accepting">
<term>
<constant>EventBufferEvent::SSL_ACCEPTING</constant>
</term>
<listitem>
<para>
В текущий момент SSL участвует в установлении соединения как сервер
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
<!-- }}} -->
</partintro>
&reference.event.entities.eventbufferevent;
</reference><!-- 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
vi: ts=1 sw=1
-->