關(guān)于事件的持續(xù)化
默認(rèn)情況下,任何時(shí)候一個(gè)掛起的事件被激活(因?yàn)樗膄d準(zhǔn)備好了讀或者寫(xiě),或者因?yàn)樗某瑫r(shí)過(guò)期了),它會(huì)在回調(diào)函數(shù)執(zhí)行之前變?yōu)榉菕炱稹H绻阆胱屖录俅螔炱?,你需要在回調(diào)函數(shù)內(nèi)部調(diào)用event_add()。
如果一個(gè)事件被設(shè)置了ev_persist,那么這個(gè)事件就是持續(xù)化的,意思就是這個(gè)事件會(huì)保持掛起狀態(tài),即使回調(diào)函數(shù)被執(zhí)行。如果你想讓它變?yōu)榉菕炱馉顟B(tài),可以在回調(diào)函數(shù)中調(diào)用event_del()。
任何時(shí)候事件的回調(diào)函數(shù)觸發(fā)都會(huì)重置持續(xù)化事件中的超時(shí)狀態(tài)。因此,如果的事件有EV_READ/EV_PERSIST并且設(shè)置了5秒超時(shí),那么有兩種情況會(huì)觸發(fā)這個(gè)事件:
當(dāng)socket可以進(jìn)行讀取的時(shí)候
當(dāng)5s超時(shí)到期的時(shí)候
<?php $base = event_base_new(); $event = event_new(); event_set($event,STDIN,EV_READ | EV_PERSIST,'print_line',[$event,$base]); event_base_set($event,$base); event_add($event,5000000); event_base_loop($base); function print_line($fd, $events, $arg) { // 5秒超時(shí)會(huì)自動(dòng)輸出1,每次執(zhí)行了read后,超時(shí)會(huì)被重置 echo 1; static $max_requests = 0; $max_requests++; if ($max_requests == 10) { // $arg[1] = $base event_base_loopexit($arg[1]); } // 打印輸出 echo fgets($fd); }
每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)