(PECL ev >= 0.2.0)
EvEmbed::__construct — 构造 EvEmbed 对象
$other
,$callback
= ?,$data
= ?,$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
?>