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