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制作静态网站的模板框架
Oct 09 PHP
第四节 构造函数和析构函数 [4]
Oct 09 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
PHP5+UTF8多文件上传类
Oct 17 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
laravel 判断查询数据库返回值的例子
Oct 11 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 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-fpm的配置详解
2013/06/03 PHP
php对数组排序的简单实例
2013/12/25 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
javascript读取xml
2006/11/04 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
jquery ui bootstrap 实现自定义风格
2014/11/14 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
2015/08/06 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python 命令行传入参数实现解析
2019/08/30 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
python编写俄罗斯方块
2020/03/13 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
政风行风评议整改方案
2014/09/15 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
吴仁宝观后感
2015/06/09 职场文书
《去年的树》教学反思
2016/02/18 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
浅谈Vue的computed计算属性
2022/03/21 Vue.js