EvEmbed::__construct

(PECL ev >= 0.2.0)

EvEmbed::__constructКонструктор объекта EvEmbed

Описание

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

Это довольно продвинутый тип наблюдателя, который позволяет встроить один цикл событий в другой (в настоящее время поддерживаются только события ввода-вывода во встроенном цикле, другие типы наблюдателей могут обрабатываться с задержкой или неверно и не должны использоваться).

Более подробно читайте в » документации libev.

Этот наблюдатель наиболее полезен в BSD системах без работающего kqueue для поддержки обработки большого количества сокетов. Смотрите пример ниже.

Список параметров

other

Экземпляр класса EvLoop. Событийный цикл для встраивания. Этот цикл должен быть встраиваемым (см. Ev::embeddableBackends() ).

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() - Возвращает набор бекэндов, которые можно встроить в прочие событийные циклы