(PECL ev >= 0.2.0)
EvEmbed::__construct — Конструктор объекта EvEmbed
$other
,$callback
= ?,$data
= ?,$priority
= ?Это довольно продвинутый тип наблюдателя, который разрешает встроить один цикл событий в другой. Пока поддерживаются только события ввода-вывода во встроенном цикле, другие типы наблюдателей иногда обрабатываются с задержкой или неправильно, и их не рекомендуют использовать.
Подробнее об этом рассказывает страница » документации libev.
Этот наблюдатель наиболее полезен
в BSD системах без работающего
kqueue
для поддержки обработки большого количества сокетов.
Смотрите пример на этой странице.
other
Экземпляр класса EvLoop. Событийный цикл для встраивания. Этот цикл должен быть встраиваемым. Смотрите описание метода Ev::embeddableBackends().
callback
Доступные значения параметра описывает страница «Callback-функции наблюдателей».
data
Пользовательские данные, ассоциированные с наблюдателем.
priority
Пример #1 Пример встраивания цикла, который создали через kqueue, в событийный цикл по умолчанию
<?php
/*
* Проверьте, доступен ли kqueue, и создайте бэкенд kqueue
* для взаимодействия с сокетами; часто это работает с любой реализацией kqueue.
* Сохраните событийный цикл kqueue/socket-only в 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 для всего остального
?>