微信号:ToFeelings

介绍:技术的深度和广度只能靠自己努力去发掘,谁也不能替你学习,在这里希望你能有所收获.

Swoole Timer 的应用

2019-04-08 09:00 訢亮

你好,Swoole

PHP 的协程高性能网络通信引擎,使用 C/C++ 语言编写,提供了多种通信协议的网络服务器和客户端模块。

Swoole 可应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。

学习 Swoole 之前,最好先了解下底层知识,比如,线程/进程、IO、TCP/IP协议 等。

推荐大家读一下《Linux 高性能服务器编程》这本书。我有这本书的PDF版,需要的可以关注公众号,回复 “Linux 高性能服务器编程” 即可获取。

这篇文章主要分享 Timer 毫秒精度的定时器。

本地版本:PHP 7.2.6、Swoole 4.3.1。

Timer

主要有三个方法:

swoole_timer_tick 间隔的时钟控制器

swoole_timer_after 指定的时间后执行

swoole_timer_clear 删除定时器

示例代码:

运行结果:

 
           
  1. tick 3000ms - 2019-04-07 21:36:56

  2. tick 3000ms - 2019-04-07 21:36:59

  3. tick 3000ms - 2019-04-07 21:37:02

  4. after 9000ms - 2019-04-07 21:37:02

应用场景

一、比如,每天凌晨跑业务脚本,脚本中包括了请求其他业务方或第三方的接口,如果接口超时无响应或没有数据返回,需要进行重试。

重试机制为:每5隔分钟再发送一次请求,最多尝试5次,在5次内成功停止该任务,5次仍失败也停止该任务。

示例代码:

运行结果:

 
           
  1. 2019-04-07 21:40:48 执行任务中...(1)

  2. 2019-04-07 21:40:48 请求接口失败,5分钟后再次尝试

  3. 2019-04-07 21:45:48 执行任务中...(2)

  4. 2019-04-07 21:45:48 请求接口失败,5分钟后再次尝试

  5. 2019-04-07 21:50:48 执行任务中...(3)

  6. 2019-04-07 21:50:48 请求接口失败,5分钟后再次尝试

  7. 2019-04-07 21:55:48 执行任务中...(4)

  8. 2019-04-07 21:55:48 请求接口失败,5分钟后再次尝试

  9. 2019-04-07 22:00:48 执行任务中...(5)

  10. 2019-04-07 22:00:48 请求接口失败,已失败5次,停止执行

二、比如,设计一个用WEB界面管理管理定时任务的系统。

Linux Crontab 最小时间粒度为分钟。

PHP Swoole 最小时间粒度为毫秒。

 
           
  1. 0 1 2 3 4 5

  2. | | | | | |

  3. | | | | | +------ day of week (0 - 6) (Sunday=0)

  4. | | | | +------ month (1 - 12)

  5. | | | +-------- day of month (1 - 31)

  6. | | +---------- hour (0 - 23)

  7. | +------------ min (0 - 59)

  8. +-------------- sec (0-59)

WEB界面管理

  • 登录、权限管理

  • 任务管理(增删改查)

  • 脚本机管理(机器IP地址)

  • 任务日志

架构图

项目地址

https://github.com/osgochina/Donkey

三、比如,监控服务器状况。

参考文档

  • https://wiki.swoole.com/wiki/page/p-timer.html

推荐阅读

本文欢迎转发,转发请注明作者和出处,谢谢!

 
IT小圈儿 更多文章 我眼中的 RPC 领导力 之 《情境领导》 系统的讲解 - PHP 接口签名验证 善于捕捉暗时间者,能拥有更长的“生命” - 读《暗时间》 系统的讲解 - PHP 浮点数高精度运算
猜您喜欢 Android 6.0 动态权限 为什么我不推荐大家去外包公司 期待已久的Java 9 今日发布 五分钟读懂UML类图 插件扩展之网页视频播放器-兼容ie