电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

PHP高性能I/O框架Libevent的使用详解

  • 资源ID:61316010       资源大小:41.72KB        全文页数:10页
  • 资源格式: DOCX        下载积分:0金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要0金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

PHP高性能I/O框架Libevent的使用详解

PHP高性能I/O框架Libevent的使用详解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 库:?1yum install libevent-dev然后安装PHP扩展。PHP5安装:?1pecl install libevent-0.1.0PHP7安装(不稳定):?12345git clone https:/github.com/expressif/pecl-event-libevent.gitcd pecl-event-libeventphpize./configuremake && sudo make install注:后面的代码示例均使用的php5.6+libevent-0.1.0环境。基本使用下面的例子实现了一个单进程的TCP server,基于libevent实现I/O复用,达到高性能。libevent_tcp_server.php?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115<!-php   $receive = ;$master = ;$buffers = ; $socket = stream_socket_server ("tcp:/0.0.0.0:9201", $errno, $errstr);if (false = $socket )  echo "$errstr($errno)n" exit();if (!$socket) die($errstr."-".$errno);stream_set_blocking($socket,0);$id = (int)$socket;$master$id = $socket; echo "waiting client.n"  /accept事件回调函数,参数分别是$fd, $events, $arg。/也就是 event_set 函数的$fd, $events, $arg参数。function ev_accept($socket, $flag, $base) global $receive; global $master; global $buffers;  $connection = stream_socket_accept($socket); stream_set_blocking($connection, 0); $id = (int)$connection;  echo "new Client $idn"  $event = event_new(); event_set($event, $connection, EV_READ | EV_PERSIST, 'ev_read', $id); event_base_set($event, $base); event_add($event);  $master$id = $connection;  $receive$id = ''  $buffers$id = $event; / event实例一定要存放在一个全局数组里面。如果去掉该行,客户端强制断开再连接,服务端无法正常收到消息 /read事件回调函数function ev_read($buffer, $flag, $id)   global $receive; global $master; global $buffers;  /该方法里的$buffer和$master$id指向相同的内容 / var_dump(func_get_args(), $master$id );  /循环读取并解析客户端消息 while( 1 )   $read = fread($buffer, 1024);   /客户端异常断开  if($read = '' | $read = false)break;     $pos = strpos($read, "n");  if($pos = false)  $receive$id .= $read;/ echo "received:".$read."not all package,continue recpeingn"  else$receive$id .= trim(substr ($read,0,$pos+1);$read = substr($read,$pos+1); switch ( $receive$id ) case "quit":  echo "client close connn"     / fclose($master$id); /断开客户端连接  / event_del($buffers$id); /删除事件   /下面的写法与上面调用函数效果一样,都是关闭客户端连接  unset($master$id);  unset($buffers$id);  break; default:  / echo "all package:n"  echo $receive$id."n"  break;$receive$id=''    /创建全局event base$base = event_base_new();/创建 event$event = event_new(); /设置 event:其中$events设置为EV_READ | EV_PERSIST ;回调事件为ev_accept,参数 $base/EV_PERSIST可以让注册的事件在执行完后不被删除,直到调用event_del()删除.event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base); / 全局event base添加 当前eventevent_base_set($event, $base);event_add($event);echo  "start run.n" /进入事件循环event_base_loop($base); /下面这句不会被执行echo "This code will not be executed.n"</pre->我们先运行代码:?123$ php libevent_tcp_server.phpwaiting client.start run.客户端使用telnet:?12345$ telnet 127.0.0.1 9201Trying 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_bufferlibevent还提供了event_buffer_系列函数。手册里的解释是:Libevent在基础的API里提供了一层抽象层,使用 buffered event ,我们无序手动处理I/O。估计是对性能的提升。乐淘棋牌http:/www.jiekeqipai.net示例:libevent_buffer_tcp_server.php?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114<!-php  $receive = ;$master = ;$buffers = ; $socket = stream_socket_server ("tc

注意事项

本文(PHP高性能I/O框架Libevent的使用详解)为本站会员(m****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。

分享当前资源【PHP高性能I/O框架Libevent的使用详解】到朋友圈,您即可以免费下载此资源!
微信扫一扫分享到朋友圈
二维码
操作提示:任选上面一个二维码,打开微信,点击“发现”使用“扫一扫”,即可将选择的网页分享到朋友圈
您可能感兴趣的------------------------------------------------------------------------------------------------------



关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.