朋友们,好久不见!
最近在用全新的技术栈研发全新的产品(下次详聊),顺便更新了我们微擎市场的几个模块。
在开发中遇到一个有趣且实用的思路 —— 微擎模块定时执行任务,我在这里把原理和实战分享给大家一起学习研究!
功能介绍 定时执行任务,比如我们添加一个推送任务,要求在某个时间点执行,这个时间点可能是几分钟后,也可能是几小时或者几天后。 由于 PHP 的天生缺陷,无法保持脚本一直在执行(比如会被超时结束、回收内存结束等),所以我们很难在PHP上实现延时 N 秒后执行下一步代码。 解决思路 我们发现了一个解决这个 PHP 缺陷的好办法(已流行使用于多个大型微擎模块): 用 HTTP 方式定时请求某个PHP接口,接口判断任务,如果有则获取后执行。 比如,我们创建一个时间在 2020/09/09 11:11:00 执行的任务,那么存储相应的数据和执行时间到数据库后,通过定时请求PHP URL接口,定时判断是否有任务执行时间小于当前时间并且没执行的任务,如果有,则执行。 如果你还是有点迷糊,请继续往下看下方这个例子 ^_^。 实战案例 vPush小程序订阅消息群发(微擎版)在最新的版本中,新增了定时任务执行功能。 首先我们通过后台的配置说明,获取到定时任务接口,然后在宝塔面板中添加定时请求计划任务:这样,宝塔的计划任务程序就会每隔 1 分钟去请求我们的接口,我们的程序也就自然可以每隔 1 分钟检测是否有新的执行任务了。
然后,我们测试一下,添加推送任务的时候,把时间往后延迟一点试试:
这样任务就进入待执行列表啦:
最后,通过上方配置的定时请求功能,程序会自动检测任务的时间,如果时间到了,则自动执行对应的任务,也就达到我们的最终目的:定时推送群发消息啦!
这个原理和技巧很好理解很简便,可以应用在很多场景中,如果您的产品有定时执行的需求,而使用的编程语言又很难做到维持延迟执行,那么不妨试试这个方法,让产品更强大起来!
文中实战项目名称:小程序必备的订阅消息群发推送神器