代码改变世界

Swoole事件处理系统

2013-05-22 15:52  游乐场123  阅读(372)  评论(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.<?php
02.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.<?php
02.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.<?php
2.$handle = array('test'=>'test');
3.?>