Ev
PHP Manual

Класс EvIo

(PECL ev >= 0.2.0)

Введение

Наблюдатели EvIo проверяют, является ли файл, сокет или поток, преобразуемый в числовой дескриптор файла, доступным на чтение или на запись при каждой итерации событийного цикла, или, если более точно, когда чтение не заблокирует процесс, а запись сможет быть произведена. Такое поведение называется переключение уровня (level-triggering), потому, что события будут создаваться все время, пока сохраняется отслеживаемое состояние. Для прекращения создания событий надо просто остановить наблюдателя.

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

Другой момент, который необходимо держать в уме, это то, что всегда существует возможность ложного срабатывания. Например Ev::READ вызовет callback-функцию, но в то же время файл заблокируется подзапросом read(). В такую ситуацию очень легко попасть и именно поэтому рекомендуется всегда использовать неблокирующий ввод/вывод. Возврат read() дополнительного EAGAIN гораздо предпочтительнее, чем "зависание" программы в ожидании данных.

Если по каким то причинам невозможно использовать fd в неблокирующем режиме, то имеет смысл дополниельно проверять, доступне ли файл на чтение в данный конкретный момент. Кто-то дополнительно использует SIGALRM и внутренний таймер для проверки, что блокировке не вечная.

Старайтесь всегда использовать неблокирующий режим.

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

EvIo extends EvWatcher {
/* Свойства */
public $fd ;
public $events ;
/* Наследуемые свойства */
public $is_active ;
public $data ;
public $is_pending ;
public $priority ;
/* Методы */
public __construct ( mixed $fd , int $events , callable $callback [, mixed $data [, int $priority ]] )
final public static EvIo createStopped ( mixed $fd , int $events , callable $callback [, mixed $data = NULL [, int $priority = 0 ]] )
public void set ( mixed $fd , int $events )
/* Наследуемые методы */
public int EvWatcher::clear ( void )
abstract public EvWatcher::__construct ( void )
public void EvWatcher::feed ( int $revents )
public EvLoop EvWatcher::getLoop ( void )
public void EvWatcher::invoke ( int $revents )
public bool EvWatcher::keepalive ([ bool $value ] )
public void EvWatcher::setCallback ( callable $callback )
public void EvWatcher::start ( void )
public void EvWatcher::stop ( void )
}

Свойства

fd

events

Содержание


Ev
PHP Manual