首頁  >  文章  >  php教程  >  關於事件的可持續化

關於事件的可持續化

大家讲道理
大家讲道理原創
2016-11-11 09:23:281403瀏覽

關於事件的持續化
默認情況下,任何時候一個掛起的事件被激活(因為他的fd準備好了讀或者寫,或者因為他的超時過期了),它會在回調函數執行之前變為非掛起。如果你想讓事件再次掛起,你需要在回調函數內部呼叫event_add()。
如果一個事件被設定了EV_PERSIST,那麼這個事件就是持續化的,意思就是這個事件會保持掛起狀態,即使回呼函數被執行。如果你想讓它變成非掛起狀態,可以在回調函數中呼叫event_del()。

任何時候事件的回呼函數觸發都會重置持續化事件中的超時狀態。因此,如果的事件有EV_READ/EV_PERSIST並且設定了5秒超時,那麼有兩種情況會觸發這個事件:

  • 當socket可以進行讀取的時候

  • 當5s超時到期的時候


當5s超時到期的時候🎜 🎜🎜
<?php
$base = event_base_new();
$event = event_new();

event_set($event,STDIN,EV_READ | EV_PERSIST,&#39;print_line&#39;,[$event,$base]);

event_base_set($event,$base);
event_add($event,5000000);
event_base_loop($base);

function print_line($fd, $events, $arg)
{
    // 5秒超时会自动输出1,每次执行了read后,超时会被重置
    echo 1;
    static $max_requests = 0;
    $max_requests++;
    if ($max_requests == 10) {
        // $arg[1] = $base
        event_base_loopexit($arg[1]);
    }
    // 打印输出
    echo  fgets($fd);
}
🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn