PHP框架Swoole定时器Timer特性分析


Posted in PHP onAugust 19, 2014

本文所述PHP框架Swoole定时器Timer特性分析具有很好的实用价值,值得PHP程序开发人员学习借鉴。具体分析如下:

首先,在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计、通知等操作。

比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行、到期情况、整个项目的进度等等,根据统计情况,做相应通知处理;

这样一个场景,如何编程实现?

用一般的编程方式,是无法实现自动触发与统计的。当然,简单的思路,是利于系统的cron job机制。但这种方式,对于配置及可靠性方面,需要比较多的人为操作因素。

Swoole是一个使用c开发的php扩展,通过php就可以实现高性能web服务器,同时,还内置了定时器Timer、任务队列Task特性。这样,基于swoole,你可以在程序层面控制实现方式,减少对外部工具 - 独立的消息队列服务器、定时任务管理工具等的依赖性。

PHP框架Swoole定时器Timer特性分析

swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行。用法如下:

swoole_server_addtimer($serv, 10);

第二个参数是定时器的间隔时间,单位为秒。swoole定时器的最小颗粒是1秒。支持多个定时器。注意不能存在2个相同间隔时间的定时器。 增加定时器后需要写一个回调函数。

具体代码如下:

swoole_server_handler($serv, 'onTimer', my_OnTimer);
function my_OnTimer($serv, $interval)
{
  echo "Timer[$interval] is call\n";
}

Task模块,用来做一些异步的慢速任务,比如webim中发广播。类似node.js,假如有10万个连接,要发广播时,那会循环10万次,这时候程序不能做任何事情,不能接受新的连接,也不能收包发包。

而swoole不同,丢给task进程之后,你的reactor,worker照跑不误。任务完成后会异步地通知worker进程告诉它此任务已经完成。

当然task模块的作用还不仅如此,实现PHP的数据库连接池,异步队列等等,还需要进一步挖掘。

感兴趣的读者可以测试一下本文所述实例代码,并根据自身项目需求进一步挖掘其用法。

PHP 相关文章推荐
PHP Mysql编程之高级技巧
Aug 27 PHP
php whois查询API制作方法
Jun 23 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
PHP制作图形验证码代码分享
Oct 23 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
php常用表单验证类用法实例
Jun 18 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
Apr 02 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 #PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 #PHP
php解析json数据实例
Aug 19 #PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 #PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 #PHP
php中用memcached实现页面防刷新功能
Aug 19 #PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 #PHP
You might like
php下几个常用的去空、分组、调试数组函数
2009/02/22 PHP
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
Javascript的闭包详解
2014/12/26 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
web.py获取上传文件名的正确方法
2014/08/26 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
使用url_helper简化Python中Django框架的url配置教程
2015/05/30 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
Python函数装饰器实现方法详解
2018/12/22 Python
python http基本验证方法
2018/12/26 Python
python对象与json相互转换的方法
2019/05/07 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python ssh 执行shell命令的示例
2020/09/29 Python
美国一家著名的儿童鞋制造商:Stride Rite
2017/01/02 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
英国鞋网:Rubber Sole
2020/03/03 全球购物
STP的判定过程
2012/10/01 面试题
学校运动会广播稿范文
2014/10/02 职场文书
领导欢送会主持词
2015/07/06 职场文书
python 破解加密zip文件的密码
2021/04/22 Python