SunshinePHP 2019

Класс EventBufferEvent

(PECL event >= 1.2.6-beta)

Введение

Представляет буферезированное событие Libevent.

Обычно приложению необходимо произвести буферизацию некоторого количества данных в дополнение к тому, чтоб просто реагировать на события. Когда мы, к примеру, хотим записывать данные, обычный алгоритм выглядит так:

  1. Решаем, что нам надо записать данные в соединение; складываем данные в буфер

  2. Ожидаем, когда соединение станет доступным для записи

  3. Записываем столько данных, сколько можем

  4. Запоминаем, сколько данных записали и, если остались недозаписанные данные, ждем, когда соединение снова станет доступно для записи.

Это шаблон буферезированного вводы/вывода настолько распространен, что Libevent предоставляет встроенный механизм для него. "Буферезированное событие" состоит из транспорта (например сокета), буфера чтения и буфера записи. В отличии от стандартных событий, которые используют функцию обратного вызова когда транспорт становится доступен для чтения или записи, буферизованное событие вызывает функцию обратного вызова тогда, когда прочитает или запишет достаточное количество данных.

Обзор классов

final EventBufferEvent {
/* Константы */
const integer READING = 1 ;
const integer WRITING = 2 ;
const integer EOF = 16 ;
const integer ERROR = 32 ;
const integer TIMEOUT = 64 ;
const integer CONNECTED = 128 ;
const integer OPT_CLOSE_ON_FREE = 1 ;
const integer OPT_THREADSAFE = 2 ;
const integer OPT_DEFER_CALLBACKS = 4 ;
const integer OPT_UNLOCK_CALLBACKS = 8 ;
const integer SSL_OPEN = 0 ;
const integer SSL_CONNECTING = 1 ;
const integer SSL_ACCEPTING = 2 ;
/* Свойства */
public integer $fd ;
public integer $priority ;
public readonly EventBuffer $input ;
public readonly EventBuffer $output ;
/* Методы */
public void close ( void )
public bool connect ( string $addr )
public bool connectHost ( EventDnsBase $dns_base , string $hostname , int $port [, int $family = EventUtil::AF_UNSPEC ] )
public __construct ( EventBase $base [, mixed $socket = NULL [, int $options = 0 [, callable $readcb = NULL [, callable $writecb = NULL [, callable $eventcb = NULL ]]]]] )
public static array createPair ( EventBase $base [, int $options = 0 ] )
public bool disable ( int $events )
public bool enable ( int $events )
public void free ( void )
public string getDnsErrorString ( void )
public int getEnabled ( void )
public EventBuffer getInput ( void )
public EventBuffer getOutput ( void )
public string read ( int $size )
public bool readBuffer ( EventBuffer $buf )
public void setCallbacks ( callable $readcb , callable $writecb , callable $eventcb [, string $arg ] )
public bool setPriority ( int $priority )
public bool setTimeouts ( float $timeout_read , float $timeout_write )
public void setWatermark ( int $events , int $lowmark , int $highmark )
public string sslError ( void )
public static EventBufferEvent sslFilter ( EventBase $base , EventBufferEvent $underlying , EventSslContext $ctx , int $state [, int $options = 0 ] )
public string sslGetCipherInfo ( void )
public string sslGetCipherName ( void )
public string sslGetCipherVersion ( void )
public string sslGetProtocol ( void )
public void sslRenegotiate ( void )
public static EventBufferEvent sslSocket ( EventBase $base , mixed $socket , EventSslContext $ctx , int $state [, int $options ] )
public bool write ( string $data )
public bool writeBuffer ( EventBuffer $buf )
}

Свойства

fd

Числовой файловый дескриптор связанный с буферезированным сокетом. Обычно является связанным сокетом. Равен NULL, если отсутствует файловый дескриптор(сокет) связанный с буферизированным событием.

priority

Приоритет событий, используемых для реализации буферизованных событий.

input

Нижележащий объект входящего буфера ( EventBuffer )

output

Нижележащий объект исходящего буфера ( EventBuffer )

Предопределенные константы

EventBufferEvent::READING

Событие произошло в момент операции чтения из bufferevent. Проверьте другие флаги для этого события.

EventBufferEvent::WRITING

Событие произошло в момент операции записи в bufferevent. Проверьте другие флаги для этого события.

EventBufferEvent::EOF

Получен признак конца файла для буферизированного события.

EventBufferEvent::ERROR

Произошла ошибка во время операции с bufferevent. Подробную информацию об ошибке можно получить с помощью методов EventUtil::getLastSocketErrno() и/или EventUtil::getLastSocketError() .

EventBufferEvent::TIMEOUT

EventBufferEvent::CONNECTED

Запрошенное соединение с bufferevent установлено.

EventBufferEvent::OPT_CLOSE_ON_FREE

Закрыть нижележащий транспорт, когда объект буферизированного события уничтожен. Будет закрыт сокет, уничтожен буфер и т.д.

EventBufferEvent::OPT_THREADSAFE

Автоматически размещать блокировки для bufferevent, что позволяет безопасно использовать многопоточность.

EventBufferEvent::OPT_DEFER_CALLBACKS

Когда флаг установлен, bufferevent откладывает все свои функции обратного вызова. См. » Быстрое, переносимое, неблокирующее сетевое програмирование с Libevent и отложенными функциями обратного вызова (Deferred callbacks) .

EventBufferEvent::OPT_UNLOCK_CALLBACKS

По умолчанию, когда bufferevent настроен как потокобезопасный, для буферизированного события будут сохраняться блокировки при запуске любых пользовательских функций обратного вызова. Установка этого флага говорит Libevent убирать блокировки при вызове этих callback-функций.

EventBufferEvent::SSL_OPEN

Подтверждение SSL завершено

EventBufferEvent::SSL_CONNECTING

В текущий момент SSL участвует в установлении соединения как клиент

EventBufferEvent::SSL_ACCEPTING

В текущий момент SSL участвует в установлении соединения как сервер

Содержание

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top