美文网首页
记一次蛋疼的PHP后台任务

记一次蛋疼的PHP后台任务

作者: odaycaogen | 来源:发表于2019-01-05 18:22 被阅读0次

要求实现这样一个功能(亲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后台任务

相关文章

  • 记一次蛋疼的PHP后台任务

    要求实现这样一个功能(亲S爱B的客户) 想同时设置多个时间段的,怎么实现呢,例如,10001.10020.1008...

  • 记一次超级蛋疼的需求

    今天上班,QA照惯例扯着嗓子对我吼:“Cole,你过来一下“我忐忑不安的走过去,只期望在这版本上线之前不要出现什么...

  • 我参加了一场超级“无聊”的比赛丨国际第二届发呆大赛

    一次集体(wu)蛋(yi)疼(shi)的艺术 发呆顾名思就是“闲的蛋疼”的人,号召一群人一起“蛋疼”,并且一群更加...

  • php-resque :基于Redis的后台任务系统

    为什么使用php-resque? php-resque 是轻量级后台任务系统,基于Redis,功能设计简单,配置灵...

  • 解析json

    golang 编码 json 还比较简单,而解析 json 则非常蛋疼。不像 PHP 一句 json_decode...

  • 蛋疼

    这是一次不可思议的经历,甚至有些搞笑,还有些荒唐。 事情发生在去年的秋天,整整过去一年了。那时的我感觉身体好像出了...

  • 蛋疼

  • 只要肯努力,什么都能挣到!

    蛋疼! 真的蛋疼! 现在真的很蛋疼! 我不开玩笑! 2018年,我过的很蛋疼! 请欣赏这个视频。“只要肯努力,什么...

  • PHP学ThinkPHP还是Laravel

    PHP初学者而且还是自学者的蛋疼问题,学ThinkPHP还是学Laravel? 请留下您宝贵的建议。。。 Lara...

  • PHP后台任务运行

    在运行前 先要了解一下 什么是文件描述符。 什么是文件描述符?文件描述符是一个简单的正整数,用以标明每一个被进程所...

网友评论

      本文标题:记一次蛋疼的PHP后台任务

      本文链接:https://www.haomeiwen.com/subject/tqddrqtx.html