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生成自己的LOG文件
Oct 09 PHP
用PHP和ACCESS写聊天室(八)
Oct 09 PHP
php网页后退不再出现过期
Mar 08 PHP
php URL编码解码函数代码
Mar 10 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
php生成验证码,缩略图及水印图的类分享
Apr 07 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
php实现基于pdo的事务处理方法示例
Jul 21 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处理整数函数的详解
2013/06/09 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
JS打印组合功能
2016/08/04 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
布同 统计英文单词的个数的python代码
2011/03/13 Python
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
python实现360的字符显示界面
2014/02/21 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
python中几种自动微分库解析
2019/08/29 Python
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
百度软件工程师职位
2013/02/14 面试题
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
材料物理专业个人求职信
2013/12/15 职场文书
新学期开学标语
2014/06/30 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
班级班风口号大全
2015/12/25 职场文书