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
繁体中文转换为简体中文的PHP函数
Oct 09 PHP
php中用数组的方法设置cookies
Apr 21 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
两千行代码的PHP学习笔记汇总
Oct 05 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
php 三大特点:封装,继承,多态
Feb 19 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
Apache2 httpd.conf 中文版
2006/12/06 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
vue实现点击按钮下载文件功能
2019/10/11 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python sorted函数原理解析及练习
2020/02/10 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
小学生运动会报道稿
2014/09/12 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
给客户的感谢信
2015/01/21 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
晚会开幕词范文
2016/03/04 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书