Клас 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::clear(): int
public
EvWatcher::feed(
int
$revents
): void
public
EvWatcher::getLoop(): EvLoop
public
EvWatcher::invoke(
int
$revents
): void
public
EvWatcher::keepalive(
bool
$value
= ?): bool
public
EvWatcher::setCallback(
callable
$callback
): void
public
EvWatcher::start(): void
public
EvWatcher::stop(): void
}
Властивості
fd
events
Зміст
- EvIo::__construct - Створює об'єкт спостерігач EvIo
- EvIo::createStopped— Створює зупинений об'єкт спостерігача EvIo
- EvIo::set - Конфігурування спостерігача