이벤트 지속성에 대하여
기본적으로 보류 중인 이벤트가 활성화될 때마다(해당 fd가 읽거나 쓸 준비가 되었거나 제한 시간이 만료되었기 때문에) 콜백 함수에서 실행됩니다. 보류되지 않는 이벤트가 됩니다. 실행 전. 이벤트를 다시 보류하려면 콜백 함수 내에서 event_add()를 호출해야 합니다.
이벤트가 EV_PERSIST로 설정된 경우 이벤트는 지속됩니다. 즉, 콜백 함수가 실행되더라도 이벤트는 보류 상태로 유지됩니다. 보류 중이 아닌 상태로 두려면 콜백 함수에서 event_del()을 호출하면 됩니다.
이벤트의 콜백 함수가 실행될 때마다 지속 이벤트의 시간 초과 상태가 재설정됩니다. 따라서 이벤트에 EV_READ/EV_PERSIST가 있고 5초 제한 시간이 설정된 경우 이 이벤트를 트리거하는 두 가지 상황이 있습니다.
소켓을 읽을 수 있는 경우
5초 제한 시간이 만료되는 경우
<?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秒超时会自动输出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); }