EvEmbed::__construct
(PECL ev >= 0.2.0)
EvEmbed::__construct — EvEmbed オブジェクトを作る
説明
public
EvEmbed::__construct(
object
callable
mixed
int
)
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() - 他のイベントループに埋め込めるバックエンド群を返す
+add a note
User Contributed Notes
There are no user contributed notes for this page.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google