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批量生成缩略图的代码
Jul 19 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
解析php常用image图像函数集
Jun 24 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
PHP实现股票趋势图和柱形图
Feb 07 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
PHP开发Apache服务器配置
Jul 15 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
Apr 17 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php 移除数组重复元素的一点说明
2008/11/27 PHP
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
php fread函数使用方法总结
2019/05/28 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
js给selected添加options的方法
2015/05/06 Javascript
对javascript继承的理解
2016/10/11 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
Javascript实现秒表倒计时功能
2018/11/17 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
超详细小程序定位地图模块全系列开发教学
2020/11/24 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
Python中使用ElementTree解析XML示例
2015/06/02 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
django 信号调度机制详解
2019/07/19 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
python 字符串格式化的示例
2020/09/21 Python
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
干部行政关系介绍信
2014/01/17 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
贷款承诺书
2015/01/20 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server