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 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
PHP操作文件方法问答
Mar 16 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 PHP
phpQuery占用内存过多的处理方法
Nov 13 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
PHP文件与目录操作示例
Dec 24 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
php 可变函数使用小结
Jun 12 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
一些不错的js函数ajax
2008/08/20 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jQuery示例收集
2010/11/05 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
django序列化serializers过程解析
2019/12/14 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
Html5原创俄罗斯方块(基于canvas)
2019/01/07 HTML / CSS
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
临床护理求职信
2014/04/26 职场文书
实验室的标语
2014/06/20 职场文书
药剂专业自荐书
2014/06/20 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js