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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
FirePHP 推荐一款PHP调试工具
Apr 23 PHP
header跳转和include包含问题详解
Sep 08 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
Nov 19 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
WordPress自定义时间显示格式
Mar 27 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP实现一个限制实例化次数的类示例
Sep 16 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 pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
javascript打开新窗口同时关闭旧窗口
2009/01/16 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
Javascript 中 null、NaN和undefined的区别总结
2013/04/10 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
python中List的sort方法指南
2014/09/01 Python
python实现数据图表
2017/07/29 Python
python模块之paramiko实例代码
2018/01/31 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
开朗女孩的自我评价
2014/02/10 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
2015年销售人员工作总结
2015/04/07 职场文书