php-libevent事件

<?php

$base = event_base_new();
$event  = event_new();
event_set($event,STDIN,EV_READ|EV_PERSIST,function ($fd){
    echo "\n start --".fgets($fd)." read finish\n";
},(int)STDIN);
event_base_set($event,$base);
event_add($event);


$event  = event_new();
event_set($event,STDOUT,EV_WRITE|EV_PERSIST,function ($fd)use($event){
    echo "end -- write finish\n";
    event_del($event);
},(int)STDOUT);
event_base_set($event,$base);
event_add($event);

$event  = event_new();
event_set($event,STDOUT,EV_SIGNAL | EV_PERSIST,function ($fd)use($event){
    echo "\n--signal handler--\n";
    event_del($event);
},(int)STDOUT);
event_base_set($event,$base);
event_add($event);
$count=1;
$event  = event_new();
event_set($event,0,EV_TIMEOUT ,function ($fd,$str)use($event){
    echo "\n--timeout $fd str:$str --\n";
    global $count;
    if($count >5)
    {
        event_timer_del($event);
    }else{
        $count++;
//    event_del($event);
        event_add($event,1000000);
    }


},"timer");
event_base_set($event,$base);
event_add($event,1000000);

echo fgets(STDIN);
event_base_loop($base);
在event_set来改变事件后,libevent会丢弃之前所属的base,所以需要调用event_base_set,然后event_add

事件回调函数的参数格式:
1.EV_READ,EV_WRITE  

fd:流资源或socket,

what:触发的事件的位码值,EV_READ,EV_WRITE  
arg:用户的自定义参数
void callback ([ mixed $fd  = NULL  [, int $what  [, mixed $arg  = NULL  ]]] )

2.EV_TIMEOUT

void callback ([ mixed $arg  = NULL  ] )

3.EV_SIGNAL 
signum:触发的信号值(e.g. SIGTERM )

void callback ([ int $signum  [, mixed $arg  = NULL  ]] )


Event扩展:相当于是对libevent扩展的类封装

EventBase,

EventBase::loop(或dispatch)

EventBase::free(释放为event base分配的资源)

Event(),

Event::timer,

Event::signal,

Event::addSignal,

Event::delSignal,

Event::addTimer,

Event::delTimer,

Event::set,

Event::free(释放事件的资源)

定时器实例:

$base = new EventBase();
$n = 2;
$e = Event::timer($base, function($n) use (&$e) {
    echo "$n seconds elapsed\n";
    $e->delTimer();
}, $n);
$e->addTimer($n);
$base->loop();



-


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值