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之字符串变相相减的代码
Mar 19 PHP
防止用户利用PHP代码DOS造成用光网络带宽
Mar 01 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php获取参数的几种方法总结
Feb 18 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
PHP缓冲区用法总结
Feb 14 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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程序守护进程化实现方法详解
2020/07/16 PHP
用js来定义浏览器中一个左右浮动元素相对于页面主体宽度的位置的函数
2012/01/21 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
python网络编程学习笔记(四):域名系统
2014/06/09 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
CSS3 简写animation
2012/05/10 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
美国NBA官方商店:NBA Store
2019/04/12 全球购物
幼儿园老师寄语
2014/04/03 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js