记一次蛋疼的PHP后台任务

要求实现这样一个功能(亲S爱B的客户)

想同时设置多个时间段的,怎么实现呢,例如,10001.10020.10080.在8.30自动转,10086..10000.7852.在8.30.01自动转,1896.8569.0852.在8.30.02自动转


我大概理解了,意思就是 用户ID与ID之间转账 不过是设定好的时间转出去,而且时间是不确定的,可能是20:30:08秒 可能是20:30:22秒,那么用服务器的定时任务是肯定行不通了


emmm。。。绞尽脑汁


看下php定时任务吧、网上说的天花乱坠,蛋疼中。


具体转账的业务代码块就如下了 查询到现在前3秒 后3秒没有处理的单就处理掉 不过怎么让他自动跑起来呢

//任务块 public functionruntaskblock(){

      try      {

          db()->startTrans();

          //获取当前时间          $now = time();

          $start = $now - 3;

          $end = $start + 3;

          $where = [];

          $where['sendtime'] = array('between',$start.",".$end);

          $where['status'] = array('eq',0);

          $list = db("com_plat")->where($where)->select();

          if ($list) {

            foreach ($list as $k => $v) {

                $users = json_decode($v['senduid']);

                $recvuid = $v['recvuid'];

                foreach ($users as $i => $u) {

                    if ($u == $recvuid) {

                      continue;

                    }

                    $usercoin = db("capital_user_coin")->where(['uid'=>$u])->find();

                    $user_coin_in  = db('capital_user_coin')->where(['uid'=> $recvuid])->find();

                    //转账金额                    $amount = $v['amount'];


                    if (!$usercoin || $usercoin['ebao'] - $amount <0) {

                      continue;

                    }

                    db('capital_user_coin')->where(['uid'=> $u])->update([

                        'ebao'  => ['exp', "ebao-{$amount}"],

                    ]);

                    db('capital_user_coin')->where(['uid'=> $recvuid])->update([

                        'ebao'=> ['exp', "ebao+{$amount}"],

                    ]);

                    //转账人支出                    db('capital_user_coin_log')->insert([

                        'uid'=> $u,

                        'amount'=> $amount,

                        'now'=> $usercoin['ebao'] - $amount,

                        'type'=> 1, // [0: '增加', 1: '减少']                        'kind'=> 8, // [8: '转账']                        'coin_code'=> 'ebao',

                        'remark'=> "转账金额-".$amount.'-收款人-'.$recvuid,

                        'addtime'=>date('Y-m-d H:i:s'),

                    ]);

                    //接收人增加                    db('capital_user_coin_log')->insert([

                        'uid'=> $recvuid,

                        'amount'=> $amount,

                        'now'=> $user_coin_in['ebao'] + $amount,

                        'type'=> 0, // [0: '增加', 1: '减少']                        'kind'=> 8, // [8: '转账']                        'coin_code'=> 'ebao',

                        'remark'=> "收款金额".$amount.'-付款人-'.$u,

                        'addtime'=>date('Y-m-d H:i:s'),

                    ]);

                    db("com_plat")->where(['id'=>$v['id']])->update(['status'=>1]);

                }


            }

            db()->commit();

          }

      }

      catch(Exception $e)

      { 

          file_put_contents("platlog.txt",$e->getMessage()."\n",FILE_APPEND);

          db()->rollback();

      }

  }

瞬间想到 swoole(不熟)、js轮询、还有试了php自己带的关掉浏览器照样执行 各种行不通

哎 聪明的我想到了python 虽然不会 但还是喀喀喀搞定了

新建一个plat.py (皮肉交易) 脚本 代码如下 

 #!/usr/bin/python# -*- coding: UTF-8 -*-import requests #导入requests包import time

 url = 'http://www.fuck86.com'while (True):

 print(url)

 r = requests.get(url)

 print(r.status_code)

 time.sleep(2)

又百度了下py的后台任务

服务器又装了py2 又有py3 可能是同事搞的,途中又是各种报错,各种不兼容

最终解决方案 是下面一条命令 具体什么意思 搞不懂  凑合用吧 

nohup python3 -u  plat.py > platout.log2>&1&

总而言之,言而总之,算是跑起来了  

2秒请求一次,一次把当前3秒前3秒后没处理的单子处理掉,就这么地吧,急着要也没办法


最后告诉客户 有问题不要找我了  水平太菜 没办法

文章出处《记一次蛋疼的PHP后台任务


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Overview The ccxt library is a collection of available cr...
    郭蝈儿蝈儿阅读 3,858评论 0 1
  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,884评论 5 116
  • 最近打起脸来还一发不可收拾了。 入手帐/文具坑一年半的老阿姨掏心掏肺,来讲讲手帐/文具那些不必重复踩的坑。 大清理...
    KIS宁阅读 770评论 1 6
  • 我小的时间有一次看见澳洲大农场剪羊毛,觉得特别有意思。那段时间有人问我,未来想做什么,我回答我要到澳洲看羊种田去,...
    君子阙阅读 800评论 6 8
  • 琼花落 落下了相随 秋水逝 逝不歇心蕊 再梦几回 哽咽诺许 云里,雨里,风里 与思忆共对 一起,念谁
    深深是蓝阅读 1,037评论 3 35