PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP如何实现订单的延时处理详解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

业务需求

订单是我们在日常开发中经常会遇到的一个功能,最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能,刚开始确认了几种方法

  • 客户端到时间请求取消
  • 服务端定时查询有没有需要取消的订单,然后批量处理
  • 下单后创建定时器,延时处理
  • 使用redis或者memcache存储,设置过期时间,自动@L_618_7@

综合虑上述方法,第一种最先排除,因为如果客户把APP后台禁止或者网络连接禁止,那么就无法发给服务端请求,订单就会一直是未处理状态;第二种方法使用的比较多,不过存在准确度的问题,还有需要确认定时任务的周期,暂时列为后补方法;第四种方法存在的问题就是订单如果@L_618_7@就是物理@L_618_7@,无法统计未处理数据(当然可以存redis时候顺便存在MysqL这样的数据库做长久存储然后用方法二定时处理)。

最终准备使用方法三。

再确认使用方法3的时候,由于使用的PHP这种开发语言,所以想实现定时器功能需要借助Swoole或者workeRMAN。由于Swoole是C开发的扩展框架,性能方面肯定比较好,就选了Swoole。

前期准备

  • 使用Swoole首先需要在服务器上安装Swoole扩展,安装方法和安装其他扩展大同小异,可以参这边文章
  • 安装完之后检测下扩展是否正常安装,查看PHPinfo或者PHP-m,如果出现Swoole,则说明安装成功
  • Swoole官方文档有定时器的nofollow" target="_blank" href="https://wiki.swoole.com/wiki/page/480.html">相关文档

开始测试

我们创一个swoole_test.PHP文件一个log.txt文件(用来测试),swoole_test.PHP代码如下:

php;">
<>PHP
swoole_timer_after(3000,function () {
 append_log(time());
 echo "after 3000ms.\n";
});
function append_log($str) {
 $dir = 'log.txt';
 $fh = fopen($dir,"a");
 fwrite($fh,$str."\n");
 fclose($fh);
}

大佬总结

以上是大佬教程为你收集整理的PHP如何实现订单的延时处理详解全部内容,希望文章能够帮你解决PHP如何实现订单的延时处理详解所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。