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 相关文章推荐
同台服务器使用缓存APC效率高于Memcached的演示代码
Feb 16 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
php中rename函数用法分析
Nov 15 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
CI框架中$this->load->library()用法分析
May 18 PHP
php文件上传后端处理小技巧
May 22 PHP
PHP对象链式操作实现原理分析
Oct 09 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
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
keras 多gpu并行运行案例
2020/06/10 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
优秀信贷员先进事迹
2014/01/31 职场文书
大学生求职自荐信
2015/03/24 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
求职自我评价参考范文
2019/05/16 职场文书
创业计划书之小型广告公司
2019/10/22 职场文书
python状态机transitions库详解
2021/06/02 Python
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
详解MySQL的内连接和外连接
2023/05/08 MySQL