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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
PHP5 面向对象程序设计
Feb 13 PHP
Smarty安装配置方法
Apr 10 PHP
php学习之function的用法
Jul 14 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
thinkphp5使用无限极分类
Feb 18 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
一个程序下载的管理程序(三)
2006/10/09 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
Node.js实现数据推送
2016/04/14 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
详解Vue中状态管理Vuex
2017/05/11 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
python类型强制转换long to int的代码
2013/02/10 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
竞选班长的演讲稿
2014/04/24 职场文书
妇女干部培训方案
2014/05/12 职场文书
年底个人总结范文
2015/03/10 职场文书
考博导师推荐信范文
2015/03/27 职场文书
MySQL系列之二 多实例配置
2021/07/02 MySQL
Spring 使用注解开发
2022/05/20 Java/Android