PHP 定时器正确姿势

正确的姿势

PHP实现定时器功能的做法可简单归结为如下几种:

使用cron、Jenkins等调度工具做周期性定时任务(既可以是执行脚本,也可以是请求某个网址); 一次性执行任务通过消息队列、数据库等方式投递给第三方程序执行; 像WordPress一样模拟定时任务,但要记住这种方式依赖于客户端请求,并需自行处理好进程并发问题; 使用常驻内存型方式运行PHP程序,即CLI模式。 除了第三种做法,其他方式都是推荐的,具体方案请结合实际需求。作为PHP程序员,当然还是首选用PHP来做,也就是CLI模式。

CLI模式

摸着良心说,CLI模式让PHP发挥的空间拓展不少。在CLI模式下,程序的入口点就是脚本,且代码可以常驻内存,进程完全由PHP代码控制。在这种形式下,实现定时器就有多种玩法。本文列出几种做法,抛砖引玉: 使用swoole、workerman等框架,内置(高精度)定时器; 使用多进程(池)/多线程(池)技术(pcntl、pthreads拓展在CLI模式下才可用); 处理tick或者alarm等信号; 使用libevent、libev等事件驱动库; sleep加循环或自己实现事件循环。 想折腾的话自己用2-5方案,不想折腾swoole、workerman等框架是首选,稳定可靠。

总结

区分HTTP请求和任务的关系,实现定时任务就简单了。至于用不用PHP来实现,那是另外一回事。当然作为web开发的首选语言,PHP实现定时任务也是轻而易举的。

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论