(PECL ev >= 0.2.0)
EvEmbed::__construct — 建構 EvEmbed 物件
這是一種相當進階的監視器類型,允許將一個事件迴圈嵌入到另一個事件迴圈中(目前嵌入式迴圈中僅支援 IO 事件,其他類型的監視器可能會以延遲或不正確的方式處理,因此不得使用)。
詳情請見 » libev 文件。
這個 watcher 在沒有正常運作 kqueue
的 *BSD* 系統上最有用,仍然可以處理大量的 sockets。請參考下面的範例。
other
EvLoop 的實例。要嵌入的迴圈,這個迴圈必須是可嵌入的(請參考 Ev::embeddableBackends())。
callback
請參考 Watcher 回呼。
data
與 watcher 關聯的自訂資料。
priority
範例 #1 將使用 kqueue 後端建立的迴圈嵌入到預設迴圈中
<?php
/*
* 檢查 kqueue 是否可用,但不建議使用,並建立一個 kqueue 後端
* 以用於 sockets(通常適用於任何 kqueue 實作)。
* 將僅限 kqueue/socket 的事件迴圈儲存在 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;
}
// 現在所有 sockets 都使用 $socket_loop,其他任何東西都使用 $loop
?>