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动态变静态原理
Nov 25 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
php将字符串随机分割成不同长度数组的方法
Jun 01 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
php简单生成随机数的方法
Jul 30 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 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中Collection 类的设计
2013/06/21 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
php常用正则函数实例小结
2016/12/29 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
旅游业大学生创业计划书
2014/01/31 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
初中学生评语大全
2014/04/24 职场文书
科技工作者先进事迹
2014/08/16 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
设备技术员岗位职责
2015/04/11 职场文书
Java中API的使用方法详情
2022/04/06 Java/Android
GPU服务器的多用户配置方法
2022/07/07 Servers