PHP Conference Nagoya 2025

Класс EvIo

(PECL ev >= 0.2.0)

Введение

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

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

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

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

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

Обзор класса

class 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 createStopped(
     mixed $fd ,
     int $events ,
     callable $callback ,
     mixed $data = null ,
     int $priority = 0
): EvIo
public set( mixed $fd , int $events ): void
/* Наследуемые методы */
public EvWatcher::feed( int $revents ): void
public EvWatcher::invoke( int $revents ): void
public EvWatcher::keepalive( bool $value = ?): bool
public EvWatcher::setCallback( callable $callback ): void
}

Свойства

fd

events

Содержание

  • EvIo::__construct — Создаёт объект наблюдатель EvIo
  • EvIo::createStopped — Создаёт остановленный объект наблюдателя EvIo
  • EvIo::set — Конфигурирование наблюдателя
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top