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