搜索
查看: 2001|回复: 0

PHP如何实现订单的延时处理详解

[复制链接]

5378

主题

5381

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
17651
发表于 2018-2-11 11:46:42 | 显示全部楼层 |阅读模式

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

  
  • 客户端到时间请求取消
      
  • 服务端定时查询有没有需要取消的订单,然后批量处理
      
  • 下单后创建定时器,延时处理
      
  • 使用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代码如下:
  • 长春网站建设 网站设计 www.4435.cn 电话:136 2446 7185(于先生)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    长春门户网站

    长春门户网是网民了解长春的网络窗口,同是提供长春地区百姓生活分类供求信息的门户网站,同时提供长春网站建设、长春网站设计,我们将逐步的完善网站分类信息资源;

    长春门户网二维码

    联系我们

    • 工作时间:早上8:00 - 晚上5:30
    • 投稿联系:13624467185(微信同号)
    • 反馈邮箱:5053050@QQ.com
    • 公司地址:吉林省长春市亚泰大街与自由大路交汇五环国际大厦1408室

    QQ|小黑屋|手机版|Archiver|cc! ( 吉ICP备2021009740号-8 )

    Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表