PHP的Ev教程二(watcher和watche回撥等)

Object發表於2019-02-16

Watchers (觀察者)

觀察者是為了記錄某件事而創造的物件。例如,下面的程式碼等待STDIN成為可讀的:

<?php
// Wait until STDIN is readable
// 等待直到STDIN可讀
$w = new EvIo(STDIN, Ev::READ, function ($watcher, $revents) {
 echo "STDIN is readable
";
});
Ev::run(Ev::RUN_ONCE);
?>

所有觀察者建構函式會自動啟動觀察者。createStopped方法建立停止監視器(例如 EvIo::createStopped())

注意,當觀察者物件被破壞時,觀察者會自動停止。因此,應該保留由建構函式或工廠方法返回的觀察者物件

還要注意的是,所有改變watcher屬性(set,priority 等)的方法都會自動停止並在啟用時再次啟動,這意味著掛起的事件會丟失。

參見: Watcher callbacks.

Watcher callbacks (觀察者回撥)

所有監視器可以是活動的(等待事件)或不活動的(暫停)。只有活動的觀察者才會呼叫它們的回撥。所有回撥都會被呼叫(至少有兩個引數):watcher: 觀察者,和revents: 接收時間的位掩碼。

觀察者回撥傳遞給觀察者建構函式(派生於EvWatcher – EvCheck::__construct() , EvChild::__construct()的類 等)。觀察者回撥應該匹配以下原型:

void callback ([ object $watcher = NULL [, int $revents = NULL ]] )

watcher (觀察者例項)
The watcher instance(of a class extending EvWatcher ).

revents (觀察者接收的事件集)
Watcher received events.

每個監視者型別都有相關的revents位掩碼,因此可以對多個觀察者使用相同的回撥。事件掩碼是在型別之後命名的,即 EvChild (or EvLoop::child() ), 設定 EV::CHILD , EvPrepare (or EvLoop::prepare() ) 設定 Ev::PREPARE , EvPeriodic (or EvLoop::periodic() ) sets Ev::PERIODIC等等,除了I/O事件之外(它可以同時設定Ev::READ 和 Ev::WRITE bits)

相關文章