2024年PHP开发者大会日本站

EvEmbed::__construct

(PECL ev >= 0.2.0)

EvEmbed::__construct构造 EvEmbed 对象

描述

public EvEmbed::__construct(
     object $other,
     callable $callback = ?,
     mixed $data = ?,
     int $priority = ?
)

这是一个相当高级的监视器类型,允许将一个事件循环嵌入到另一个事件循环中(目前仅支持在嵌入式循环中使用IO事件,其他类型的监视器可能会被延迟或错误地处理,并且不得使用)。

详情请参阅 » libev 文档

此监视器在没有正常工作的kqueue的*BSD*系统上最为有用,以便仍然能够处理大量的套接字。请参见下面的示例。

参数

other

EvLoop 的实例。要嵌入的循环,此循环必须是可嵌入的(请参阅 Ev::embeddableBackends())。

callback

参见 监视器回调

data

与监视器关联的自定义数据。

priority

监视器优先级

示例

示例 #1 将使用 kqueue 后端创建的循环嵌入到默认循环中

<?php
/*
* 检查kqueue是否可用,但不推荐,并创建一个kqueue后端
* 用于套接字(通常适用于任何kqueue实现)。
* 将仅kqueue/套接字的事件循环存储在loop_socket中。(也可以选择
* 使用EVFLAG_NOENV)
*
* 示例来自
* http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod#Examples_CONTENT-9
*/
$loop = EvLoop::defaultLoop();
$socket_loop = NULL;
$embed = NULL;

if (
Ev::supportedBackends() & ~Ev::recommendedBackends() & Ev::BACKEND_KQUEUE) {
if ((
$socket_loop = new EvLoop(Ev::BACKEND_KQUEUE))) {
$embed = new EvEmbed($loop);
}
}

if (!
$socket_loop) {
$socket_loop = $loop;
}

// 现在将 $socket_loop 用于所有套接字,并将 $loop 用于其他任何内容
?>

参见

添加注释

用户贡献的注释

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