EvEmbed オブジェクトを作る

# EvEmbed::__construct

(PECL ev >= 0.2.0)

EvEmbed::__construct — EvEmbed オブジェクトを作る

### 説明

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

これは高度なウォッチャー型で、あるイベントループを別のイベントループに埋め込むことができます。 現在は、埋め込みループに対応しているのは IO イベントだけです。 他の型のウォッチャーを使うと、処理が遅延したり不正確な動きになったりする可能性があるので、 使ってはいけません。

詳細は、 » libev のドキュメント を参照ください。

このウォッチャーは、BSD システムで `kqueue` が使えないときにも大量のソケットを処理できるようにするのに便利です。 以下の例を参照ください。

### パラメータ

`other`
  EvLoop のインスタンス。 埋め込むループです。これは埋め込み可能なものでなければいけません (Ev::embeddableBackends() を参照ください)。
`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 を使うようになりました
    ?>

### 参考

- Ev::embeddableBackends() - 他のイベントループに埋め込めるバックエンド群を返す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open