PHP Conference Japan 2024

EvEmbed::__construct

(PECL ev >= 0.2.0)

EvEmbed::__construct建構 EvEmbed 物件

說明

public EvEmbed::__construct(
     物件 $other,
     可呼叫 $callback = ?,
     混合 $data = ?,
     整數 $priority = ?
)

這是一種相當進階的監視器類型,允許將一個事件迴圈嵌入到另一個事件迴圈中(目前嵌入式迴圈中僅支援 IO 事件,其他類型的監視器可能會以延遲或不正確的方式處理,因此不得使用)。

詳情請見 » libev 文件

這個 watcher 在沒有正常運作 kqueue 的 *BSD* 系統上最有用,仍然可以處理大量的 sockets。請參考下面的範例。

參數

other

EvLoop 的實例。要嵌入的迴圈,這個迴圈必須是可嵌入的(請參考 Ev::embeddableBackends())。

callback

請參考 Watcher 回呼

data

與 watcher 關聯的自訂資料。

priority

Watcher 優先級

範例

範例 #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
?>

另請參閱

新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top