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.
?>