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模板页面中分页代码的解析
Feb 06 PHP
php面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
php URL验证正则表达式
Jul 19 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php二分查找二种实现示例
Mar 12 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
php-app开发接口加密详解
Apr 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/11/16 PHP
php笔记之常用文件操作
2010/10/12 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
PHP获取客户端及服务器端IP的封装类
2016/07/21 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
详解rem 适配布局
2018/10/31 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
大学生职业生涯规划书前言
2014/01/09 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
社区戒毒工作方案
2014/06/04 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
张思德观后感
2015/06/09 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript