首頁 > php教程 > PHP源码 > 主體

關於事件的可持續化

大家讲道理
發布: 2016-11-11 09:23:28
原創
1369 人瀏覽過

關於事件的持續化
默認情況下,任何時候一個掛起的事件被激活(因為他的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);
}
登入後複製
🎜
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!