Swoole事件处理系统
2013-05-22 15:52 游乐场123 阅读(386) 评论(0) 收藏 举报PHP的Web程序中经常需要执行一些非查询的任务处理,传统程序一般采用直接调用函数去完成。Swoole框架提供了一整套基于事件的异步处理系统,能够实现耗时任务异步非阻塞执行。对于有大量动态数据处理,访问量很大的站点能非常有效的解决程序效率问题。
传统程序的执行方式: 请求到URL -> PHP程序执行 -> 调用相关函数或代码同步阻塞执行 -> 完成后显示页面
这样的程序有2个缺点,1,用户请求之后程序必须运行完所有代码才会显示页面,2、如果访问量较大程序会阻塞,并且并发高,系统效率会降低。
Swoole事件处理模型: 请求到URL -> PHP程序执行 -> 触发一个特定事件 -> 完成后显示页面
程序执行时,遇到耗时的非查询显示类任务不执行,而是引发一个事件,插入到高速队列中,立即响应浏览器,并显示页面。在后端服务器上运行多个Swoole的事件处理worker进程,从高速队列中取回事件,进行处理。实现了异步非阻塞的IO处理,效率会非常高。
使用方法:
在config.php文件中配置事件处理
1.define('EVENT_MODE','async');2.define('EVENT_HANDLE',WEBPATH.'/apps/configs/events.php');3.//建议使用HttpQueue程序4.define('EVENT_QUEUE','file://localhost#queue');5.define('EVENT_QUEUE_TYPE','CacheQueue');测试生成事件:
01.<?php02.require 'config.php';03.$php->autoload('event');04. 05.for($i=0;$i<10;$i++)06.{07.echo $i;08.$php->event->raise('test',$i,'say');09.}
在服务器运行,work进程
01.<?php02.require 'config.php';03. 04.function test($id,$op)05.{06.echo $id,':',$op,NL;07.}08.$php->autoload('event');09.$php->event->run_server(1000,WEBPATH.'/cache/event.log');
编写事件对应表,事件类型=>函数名称
1.<?php2.$handle = array('test'=>'test');3.?>
浙公网安备 33010602011771号