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 相关文章推荐
文件上传程序的全部源码
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
php调用mysql数据 dbclass类
May 07 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
php生成HTML文件的类方法
Oct 11 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
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
JS跨域问题详解
2014/11/25 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python中map的基本用法示例
2018/09/10 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
详解python中eval函数的作用
2019/10/22 Python
python脚本定时发送邮件
2020/12/22 Python
python中xlutils库用法浅析
2020/12/29 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
小学教师师德师风演讲稿
2014/08/22 职场文书
python某漫画app逆向
2021/03/31 Python
python使用glob检索文件的操作
2021/05/20 Python