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 相关文章推荐
WINDOWS 2000下使用ISAPI方式安装PHP
Sep 05 PHP
php下载文件的代码示例
Jun 29 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
3种php生成唯一id的方法
Nov 23 PHP
PHP读取大文件末尾N行的高效方法推荐
Jun 03 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
PHP简单遍历对象示例
Sep 28 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
Feb 15 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 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中几个常用的魔术常量
2012/02/23 PHP
php自动加载机制的深入分析
2013/06/08 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
Javascript中call,apply,bind方法的详解与总结
2016/12/12 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
微信小程序实现登录注册功能
2020/12/29 Javascript
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
python 两个数据库postgresql对比
2019/10/21 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
Pycharm plot独立窗口显示的操作
2020/12/11 Python
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
篮球兴趣小组活动总结
2014/07/07 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
招商引资工作汇报
2014/10/28 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
2014年财政局工作总结
2014/12/09 职场文书
甲午风云观后感
2015/06/02 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
如何使JavaScript休眠或等待
2021/04/27 Javascript
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Mysql事务索引知识汇总
2022/03/17 MySQL
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android