PHP Conference Japan 2024

EvIo 类

(PECL ev >= 0.2.0)

简介

EvIo 监视器在事件循环的每次迭代中检查文件描述符(或套接字,或可转换为数字文件描述符的流)是否可读或可写,或者更准确地说,是在读取不会阻塞进程并且写入至少能够写入某些数据时。这种行为称为级别触发,因为只要条件持续存在,事件就会不断接收。要停止接收事件,只需停止监视器。

每个fd的读和/或写事件监视器的数量不限。通常将所有文件描述符设置为非阻塞模式也是一个好主意(但不是必需的)。

另一件需要注意的事情是,很容易收到错误的准备就绪通知,即回调可能会用Ev::READ调用,但随后的read()实际上会阻塞,因为没有数据。很容易陷入这种情况。因此,最好始终使用非阻塞 I/O:返回EAGAIN(或类似)的额外read()比程序挂起直到某些数据到达要好得多。

如果由于某种原因无法在非阻塞模式下运行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

目录

添加注释

用户贡献注释

此页面没有用户贡献的注释。
To Top