业务需求
订单是我们在日常开发中经常会遇到的一个功能,最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能,刚开始确认了几种方法:
[*]客户端到时间请求取消
[*]服务端定时查询有没有需要取消的订单,然后批量处理
[*]下单后创建定时器,延时处理
[*]使用redis或者memcache存储,设置过期时间,自动删除
综合考虑上述方法,第一种最先排除,因为如果客户把APP后台禁止或者网络连接禁止,那么就无法发给服务端请求,订单就会一直是未处理状态;第二种方法使用的比较多,不过存在准确度的问题,还有需要确认定时任务的周期,暂时列为后补方法;第四种方法存在的问题就是订单如果删除就是物理删除,无法统计未处理数据(当然可以存redis时候顺便存在mysql这样的数据库做长久存储然后用方法二定时处理)。
最终准备使用方法三。
再确认使用方法3的时候,由于使用的PHP这种开发语言,所以想实现定时器功能需要借助Swoole或者workerman。由于Swoole是C开发的扩展框架,性能方面肯定比较好,就选了Swoole。
前期准备
[*]使用Swoole首先需要在服务器上安装Swoole扩展,安装方法和安装其他扩展大同小异,可以参考这边文章
[*]安装完之后检测下扩展是否正常安装,查看phpinfo或者PHP-m,如果出现Swoole,则说明安装成功
[*]Swoole官方文档有定时器的相关文档
开始测试
我们创建一个swoole_test.php文件和一个log.txt文件(用来测试),swoole_test.php代码如下:
页:
[1]