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 相关文章推荐
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 PHP
Chrome Web App开发小结
Sep 04 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
php编程每天必学之表单验证
Mar 01 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
Yii2.0预定义的别名功能小结
Jul 04 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 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根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
PHP反射学习入门示例
2019/06/14 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
pow在python中的含义及用法
2019/07/11 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
仓库管理制度
2014/01/21 职场文书
人事部岗位职责范本
2014/03/05 职场文书
学风建设演讲稿
2014/09/12 职场文书
杭白菊导游词
2015/02/10 职场文书
安全生产培训心得体会
2016/01/18 职场文书
八年级语文教学反思
2016/03/03 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python