PHP Conference Japan 2024

EvIo 類別

(PECL ev >= 0.2.0)

簡介

EvIo 觀察器會在事件迴圈的每次迭代中檢查檔案描述符(或通訊端,或可轉換為數字檔案描述符的串流)是否可讀或可寫,或者更精確地說,當讀取不會阻塞行程且寫入至少能夠寫入一些數據時。這種行為稱為*邊緣觸發*,因為只要條件持續存在,就會持續接收事件。要停止接收事件,只需停止觀察器即可。

每個 fd 的讀取和/或寫入事件觀察器的數量沒有限制。將所有檔案描述符設定為非阻塞模式通常也是一個好主意(但非必需)。

另一件需要注意的事情是,很容易收到錯誤的準備就緒通知,也就是說,回呼函式可能會以 Ev::READ 呼叫,但後續的 read() 實際上會阻塞,因為沒有資料。很容易陷入這種情況。因此,最好始終使用非阻塞 I/O:額外的 read() 返回 EAGAIN(或類似)比程式掛起直到某些資料到達要好得多。

如果因為某些原因無法以非阻塞模式執行 fd,則需要另外重新測試檔案描述符是否真的已準備就緒。有些人還會額外使用 SIGALRM 和一個間隔計時器,以確保不會無限期阻塞。

務必考慮使用非阻塞模式。

類別概要

class EvIo extends EvWatcher {
/* 屬性 */
public $fd;
public $events;
/* 繼承的屬性 */
public $is_active;
public $data;
public $is_pending;
public $priority;
/* 方法 */
public __construct(
     混合 $fd,
     整數 $events,
     可呼叫 $callback,
     混合 $data = ?,
     整數 $priority = ?
)
final public static createStopped(
     混合 $fd,
     整數 $events,
     可呼叫 $callback,
     混合 $data = null,
     整數 $priority = 0
): EvIo
public set( 混合 $fd , 整數 $events ): void
/* 繼承的方法 */
public EvWatcher::feed( 整數 $revents ): void
公開 EvWatcher::invoke( int $revents ): void
公開 EvWatcher::keepalive( bool $value = ?): bool
公開 EvWatcher::setCallback( callable $callback ): void
}

屬性

fd

events

目錄

新增註釋

使用者提供的註釋

此頁面沒有使用者提供的註釋。
To Top