• 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06
  • 频道栏目
    神奇公式秒杀全国11选5 > 程序开发 > Web开发 > php > 正文
    PHP高性能I/O框架Libevent的使用详解
    2018-07-16 10:20:33         来源:qq_42606051的博客  
    收藏   我要投稿

    神奇公式秒杀全国11选5 www.2zfa.com Libevent 是一个用C语言编写的、轻量级的开源高性能I/O框架,支持多种 I/O 多路复用技术: epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。PHP提供了对应的扩展libevent、Event。

    libevent扩展很久没有更新了,仅支持PHP5系列,PHP7虽然有网友fork了 libevent 扩展的源码进行更新兼容,但是稳定性不好,可能会出现段错误,所以PHP7最好使用 Event 扩展。

    与libevent扩展不同的是,Event 扩展提供了面向对象的接口,且支持更多特性。

    libevent扩展

    系统需要先安装 Libevent 库:

    yum install libevent-dev

    然后安装PHP扩展。

    PHP5安装:

    pecl install libevent-0.1.0

    PHP7安装(不稳定):

    git clone https://github.com/expressif/pecl-event-libevent.git
    cd pecl-event-libevent
    phpize
    ./configure
    make && sudo make install

    注:后面的代码示例均使用的php5.6+libevent-0.1.0环境。

    基本使用

    下面的例子实现了一个单进程的TCP server,基于libevent实现I/O复用,达到高性能。

    libevent_tcp_server.php

    我们先运行代码:

    $ php libevent_tcp_server.php
    waiting client...
    start run...

    客户端使用telnet:

    $ telnet 127.0.0.1 9201
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    hello server!

    代码里面我加了很多注释,基本上能看明白。需要注意的是:

    1、event_base是全局的,只需要创建一次,后续都是event的设置和添加。

    2、event_set的回调函数有三个参数,分别是$fd,$events,$arg。也就是 event_set 函数的$fd,$events,$arg参数。arg 如果需要多个,可以为数组。fd参数实际是保存的客户端连接,是个resource。events参数支持下列这些常量:

    EV_TIMEOUT: 超时。利用事件可以实现定时器

    EV_READ: 只要网络缓冲中还有数据,回调函数就会被触发

    EV_WRITE: 只要塞给网络缓冲的数据被写完,回调函数就会被触发

    EV_SIGNAL: POSIX信号量

    EV_PERSIST: 不指定这个属性的话,回调函数被触发后事件会被删除

    EV_ET: Edge-Trigger边缘触发

    使用event_buffer

    libevent还提供了event_buffer_系列函数。手册里的解释是:Libevent在基础的API里提供了一层抽象层,使用 buffered event ,我们无序手动处理I/O。估计是对性能的提升。

    示例:

    libevent_buffer_tcp_server.php

    注释我都写了,相比前一个例字,主要有3个地方不同:

    1、ev_accept里设置read事件全换成了待buffer的函数;

    2、ev_read回调接收参数为2个;

    3、ev_read回调里读取消息使用event_buffer_read,而不是fread。另外增加了ev_write,ev_error回调。

    定时器

    libevent提供了event_timer_*系列函数,实现一次性定时器,精度微秒。

    libevent_timer.php

     5){
      event_timer_del($args[1]); //删除定时器
     }
    }
    
    $base = event_base_new();
    $ev_timer = event_timer_new();
    event_timer_set($ev_timer, 'ev_timer', [$TIME_INTVAL, $ev_timer]);
    event_base_set($ev_timer, $base);
    event_timer_add($ev_timer, $TIME_INTVAL);//单位微秒
    
    event_base_loop($base);

    上面的例子实现了每1秒执行一次回调函数。

    使用event_*系列函数也可以实现:
    libevent_timer2.php

     5){
      event_timer_del($args[1]);
     }
    }
    
    $base = event_base_new();
    $event = event_new();
    event_set($event, 0, EV_TIMEOUT, 'ev_timer', [$TIME_INTVAL, $event]);
    event_base_set($event, $base);
    event_add($event, $TIME_INTVAL);
    
    event_base_loop($base);

    可以看出,event_timer_*系列函数是对event_*系列函数EV_TIMEOUT事件的包装。

    总结

    event_*系列函数基本上可以分为上面三大类?;褂屑父龊挥刑岬?,大家看手册就能了解。

    点击复制链接 与好友分享!回本站首页
    上一篇:使用php soap出现调用问题的简单分析
    下一篇:BOM是什么?php读取文本文件把bom读入数组的情况分析
    相关文章
    图文推荐
    点击排行

    关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 神奇公式秒杀全国11选5

    版权所有: 神奇公式秒杀全国11选5--致力于做实用的IT技术学习网站

  • 我相信“交警雨中护送高考生”是真,“交警雨中护送高考生”反被该高考生家长投诉是假。 2019-04-16
  • 14名消防员日巡逻28公里 洗冷水澡 2019-04-10
  • 靶壕有了“蓝军”,百发百中的“神枪手”练起来 2019-04-10
  • 不是秀强大了,别人就会来做朋友,这逻辑不对 2019-04-01
  • 候选企业:中国石油呼和浩特石化公司 2019-03-26
  • 航天员沙漠野外生存训练完美收官!为第一天团打call 2019-03-25
  • 请问,建立市场经济后,原计划经济哪里去?改革后,我们还在实行计划经济,为何没有提及? 2019-03-25
  • 构建年轻干部梯次培养链 2019-03-19
  • 孙实的专栏作者中国国家地理网 2019-03-15
  • 湖南师范大学举行研究阐释党的十九大精神国家社科基金重大专项学术研讨会 2019-03-15
  • [雷人]蠢货!土地处于不同的城市和地段,关联的资源不一样,价值也不一样。不然给咱俩同样面积的土地,咱的在北上广深,你的在边远山区,你干么? 2019-03-08
  • 国际社会持续热议上合青岛峰会:上合组织发展进入新阶段 彰显中国领导力 2019-03-08
  • 珍惜野生动物频现甘孜境内 生态环境质量不断提升 2019-03-06
  • "新经济形势下金融创新的变革与机遇"论坛 2019-03-06