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
require(),include(),require_once()和include_once()的异同
Jan 02 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
fckeditor上传文件按日期存放及重命名方法
May 22 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
php+mysql查询优化简单实例
2015/01/13 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
深入php内核之php in array
2015/11/10 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
2017/05/11 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
Python对象转JSON字符串的方法
2016/04/27 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
网络工程师个人的自我评价范文
2013/10/01 职场文书
金融专业应届生求职信
2013/11/02 职场文书
毕业自荐书
2013/12/09 职场文书
班主任高考寄语
2015/02/26 职场文书
车间质检员岗位职责
2015/04/08 职场文书
小学运动会入场词
2015/07/18 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python