canteen php,PHP脚本任务优化思路或改进方案?

2023-11-08

脚本部分:

date_default_timezone_set('PRC');

require_once('canteen/MySQL.php');

$mysql = MySQL::getInstance('localhost', 'root', '123456', 'canteens', 'UTF-8');

$user_balance = $mysql->all("SELECT id,balance FROM `user`;");

$json_data['bl'] = json_encode($user_balance);

require_once("E:\WWW\canteens\application\libraries\DESedeCoder.php");

require_once("E:\WWW\canteens\application\libraries\Curl.php");

// 上传终端数据库的最新用户金额至主数据库

$json_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$result = Curl::send("http://canteen.com/module/resful/main/bat_balance", $json_data, 'post');

$result = json_decode($result, TRUE);

if((int)$result['status'] === 200) {

$mysql->logs('定时更新金额ok!', 'cron.log');

}else if((int)$result['status'] === 666){

$mysql->logs('金额更新'.$result['msg'], 'cron.log');

}else if($result['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

// 上传终端数据库未上传至主数据库的消费记录

$send_data['token'] = DESedeCoder::encrypt(date('YmdH'), "*****");

$upt_consume = $mysql->all("SELECT id,user_id,monetary,consume_time,consume_type,card_reader_ip FROM `consum_record` WHERE upload_state=0");

$send_data['upt'] = json_encode($upt_consume);

$result = Curl::send("http://canteen.com/module/resful/main/upt_consume", $send_data, 'post');

$res_arr = json_decode($result,TRUE);

if($res_arr['status'] == 200 || $res_arr['status'] == 204) {

$ok_id = json_decode($res_arr['ok_id'], TRUE);

foreach ($ok_id as $val) {

$mysql->upDate('consum_record', array('upload_state' => 1), array('id='=>$val));

}

if($res_arr['status'] == 200) {

$mysql->logs('定时上传消费记录ok!', 'cron.log');

}else {

$mysql->logs('定时上传消费记录部分ok!', 'cron.log');

}

}else if($res_arr['status'] == 666) {

$mysql->logs('消费记录上传'.$result['msg'], 'cron.log');

}else if($res_arr['status']){

$mysql->logs($result['status'].' '.$result['msg'], 'cron.log');

}else {

$mysql->logs('master服务器宕机', 'cron.log');

}

Curl部分

private static function doRequest($is_post = 0) {

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定网页

curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);

// 来源一定要设置成来自本站

curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式

if (!empty(self::$data)) {

self::$data = self::dealPostData(self::$data);

curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);

}

$data = curl_exec($ch);//运行curl

curl_close($ch);

return $data;

}

以上是我执行脚本的代码,具体操作流程有以下几点:

生成token

获取数据库所有用户ID和金额集合

token和用户ID、金额数据json化通过curl发送给接口api,接口更新用户最新金额数据

根据返回状态码 记录log

用户消费记录重复上面4步,不同的是,获取本机未上传的消费记录数据;

消费记录接口,接收到消费数据的时候,插入到接口所在的数据库;而且多了一步的是,消费记录上传成功后,会返回上传成功的本机消费记录ID,根据这些消费记录ID,更新本机数据库消费记录上传状态,没上传的为0,上传成功的为1

用curl发送的消费记录数据量挺大的差不多在10W+字节

用户量在200+,300条以下;消费记录500+,1000条以下;

遇到的问题,当我执行这段脚本的时候,会出现脚本执行超时的提示,大于30s

bVIWp7?w=1030&h=177

看上面的提示内容可以得知,两次curl请求都到位了,只是在我更新本地消费记录上传状态的时候,时间不够了,当然我这个只是出现诸多问题的某一种,以后还可能会出现api接口压力过大,导致发送数据都不成功,当然这都是后话了。

只加密两个token和取出两段数据的时间可以忽略不计,大约在300~400ms之间;

求解决思路或者优化思路;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canteen php,PHP脚本任务优化思路或改进方案? 的相关文章

  • @SuppressWarnings注解详解

    SupperessWarnings 一 简介 java lang SupperessWarnings是J2SE5 0标准的Annotation之一 可以标注在类 字段 方法 参数 构造方法 局部变量上 二 作用 该注解的作用是给编译器一条指
  • 【专题5: 硬件设计】 之 【61.案例四:简易空气净化器,使用硬件产生PWM波并对马达调速】

    嵌入式工程师成长之路 系列文章 总目录 系列文章总目录 希望本是无所谓有 无所谓无的 这正如脚下的路 其实地上本没有路 走的人多了 也便成了路 原创不易 文章会持续更新 欢迎微信扫码关注公众号 承接 小程序 嵌入式 PC端项目开发 联系作者
  • ssh: Could not resolve hostname d: Name or service not known

    ssh Could not resolve hostname d Name or service not known Windows下载Linux服务器文件 除了使用XShell中Xftp或者winscp等其他图形化界面软件外 还可使用类似
  • ST表初识(C++)

    ST表 Sparse Table 稀疏表 一种数据结构 主要用来解决静态的区间最大 最小值问题 主要思想 倍增思想 在看ST表之前 先看一个问题 2 4 1 5 3 在这个序列中找出区间 1 3 3 5 1 5 max 1 3 4 max
  • Krpano全景制作使用笔记

    目录 一 前言 二 软件下载安装 三 软件使用 1 软件文件夹说明 1 docu文件夹 2 templates文件夹 3 viewer文件夹 4 droplet bat文件 a MAKE PANO NORMAL Droplet bat b
  • 5.docker可视化工具(Portainer)

    本文操作 在 192 168 204 102 机器执行 安装最新版 portainer 请使用 portainer portainer ce 镜像 图片来源 https hub docker com r portainer portaine
  • 02搭建Spark单机环境2

    目录 一 在三台虚拟机上面安装lrzsz 二 在三台虚拟机上安装配置jdk 三 配置完全分布模式Hadoop 配置文件 hdfs site xml 配置文件 mapred site xml 配置文件 yarn site xml 四 格式化与
  • [Java初学] 第一次作业 hello.java直接调用同根目录下的其他类 A.java 、B.java、C.java

    hello java public class hello public static void main String args System out println 您好 只需编译我 A a new A a fA B b new B b
  • Zookeeper与kafka

    zookeeper概述 Zookeeperl是一个开源的分布式的 为分布式框架提供协调服务的Apache项目 Zookeeper 工作机制 zookeeper从设计模式角度来理解 是一个基于观察者模式设计的分布式服务管理框架 它负责存储和管
  • win8下找到计算器并转换为程序员模式

    最近想用计算器的十进制和十六进制转化的功能 发现win8没有开始菜单了 从网上查了查 原来指令如此简单 特此做笔记 谨防忘记 操作 win r打开运行 输入calc 确定就出来了 首先看到的界面是 然后我们点击查看 程序员 就变成了 这样我
  • 关于哈工大操作系统实验三出现 task[0] trying to sleep 的解决方法

    问题 最近做哈工大操作系统实验三时明明代码没写错但是执行 run后出现以下情况 原因和解决方法 再各种比对和研究下发现这个问题原因在于加载文件系统的setup不能放在进程0里 不然会导致进程0休眠 可是别人并没有出现这个情况 尝试了网上很多
  • Kafka C++客户端库librdkafka笔记

    目录 目录 1 1 前言 2 2 缩略语 2 3 配置和主题 3 3 1 配置和主题结构 3 3 1 1 Conf 3 3 1 2 ConfImpl 3 3 1 3 Topic 3 3 1 4 TopicImpl 3 4 线程 4 5 消费
  • 工具URL

    流程图 画图工具 https www processon com
  • java 实现TCP和UDP的底层

    JAVA Socket 底层是怎样基于TCP IP 实现的 图片 2012 08 09 22 54 35 标签 java socket连接分类 JavaSE 首先必须明确 TCP IP模型中有四层结构 应用层 Application Lay
  • 在CentOS8中安装PHP8.0

    我的系统版本 cat etc redhat release 1 下载PHP安装文件 网址 https downloads php net pollita wget https downloads php net pollita php 8
  • 论文笔记:Temporal Regularized Matrix Factorization forHigh-dimensional Time Series Prediction

    0 摘要 时间序列预测问题在现代应用中变得越来越高维 如气候学和需求预测 例如 在需求预测中 项目数量可能高达50 000个 此外 数据通常是嘈杂的 充满缺失值 因此 现代应用程序需要高度可伸缩的方法 并且能够处理损坏或丢失值的噪声数据 然
  • 小程序下拉加载更多数据

    1 功能介绍 1 1 简单列表分页 功能描述 拖动下拉条 可以加载更多内容 1 1 1 实现步骤 1 1 1 1 配置 json文件 1 在app json页面配置 enablePullDownRefresh true 这会让下拉刷新效果适
  • STL 中查找算法使用总结

    顺序查找元素 find 头文件 包含在头文件 include 中 算法作用 使用 操作符 从给定的区间中查找和指定元素值相等的第一个元素 返回其迭代器 适用容器 适用于所有的序列容器 代码示例 vector
  • java 使用RabbitMQ示例

    RabbitMQ简介 RabbitMQ是一个受欢迎的消息代理 通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成 具有高可用高并发的优点 适合集群服务器 采用 Erlang实现 对主要的编程语言都有客户端支持 RabbitMQ环境

随机推荐

  • java的JVM与垃圾回收机制

    核心机制 Java虚拟机 JVM是一个虚拟的计算机 具有指令集并使用不同的存储区域 负责执行指 令 管理数据 内存 寄存器 对于不同的平台 有不同的虚拟机 只有某平台提供了对应的java虚拟机 java程序才可在此平台运行 Java虚拟机机
  • python web自动化实现登录多次 利用ddt数据驱动读取账号信息

    web自动化实现多个用户登录某系统 使用python代码实现 首先创建读取测试数据的方法 代码如下 import unittest from time import sleep from ddt import ddt data 引入ddt驱
  • 【笔记】对称密码之分组密码的工作模式

    目录 一 前言 二 分组密码概述 2 1分组密码的设计原则 2 2混淆和扩散 三 分组加密法的模式 3 1电码本ECB Electronic Code Book 模式 3 2密码分组链接CBC Cipher Block Chaining 模
  • HTTP3

    当我对HTTP的认知还停留在HTTP2 0时 HTTP协议已经发展3 0了 参考下知乎 HTTP 3 原理实战 知乎 大厂对于新技术的追求总是处于行业前列 HTTP3就是其中之一 既然大厂都逐渐在使用了 那说明它经过了一系列的实践的考验 具
  • 二分搜索——分治思想

    二分查找 二分查找是一种在每次比较之后将查找空间一分为二的算法 每次需要查找集合中的索引或元素时 都应该考虑二分查找 如果集合是无序的 我们可以总是在应用二分查找之前先对其进行排序 时间复杂度是 log N 因为 二分查找是通过将现有数组一
  • 数据结构C语言 单链表(插入、删除、查找)

    数据结构C语言 单链表 插入 删除 查找 1 插入 假设 A 的临时指针为 p C 的临时指针为 q 步骤1 删除这条连接线 步骤2 将p gt next给q gt next 步骤3 将q给p gt next 插入代码 q gt next
  • ubuntu18.04+cuda10.2+cudnn7.6.5,并使用CUDA自动安装NVIDIA驱动而非手动。

    一 CUDA和NVIDIA显卡驱动安装 cuda的安装选项中其实包含了nvidia驱动的安装选项 不过网上好多资料都说不要再cuda中勾选nvidia驱动 而要自己去nvidia官网自己查好型号下载安装文件 手动安装nvidia驱动 其实主
  • 字体格式:ttf,woff,eot

    生成网页字体 https onlinefontconverter com eot IE onetype是微软和Adobe共同开发的字体 IE浏览器全部采用这种字体 woff 其它浏览器 woff web开发字体格式 是一种专门为web而设计
  • 信号延迟仿真的 Matlab 源码实现

    信号延迟仿真的 Matlab 源码实现 信号的延迟是数字信号处理中的一个重要概念 本文将介绍如何使用 Matlab 实现信号的延迟仿真 并给出相应的源代码实现 首先 我们需要定义一个信号并进行时域分析 在 Matlab 中 我们可以使用 t
  • Ubuntu下卸载Qt

    卸载有2种办法 1 进入qt的安装目录下卸载 一般ubuntu软件是安装在opt目录下 如果不在就需要找找了 进入安装目录下 sudo MaintenanceTool 选择remove all 就可以完全删除qt了 2 命令行安装的卸载 s
  • OVS datapath流表结构及匹配过程

    datapath流表的查找函数是ovs flow tbl lookup stats 在此之前 先看下datapath组织流表的方式 最新2 6的ovs流表 已经不是最早单纯的精确匹配了 而是一种精确匹配 带掩码匹配合并在一起的方式 叫做me
  • halcon像素统计_Halcon(八)亚像素轮廓XLD

    fast threshold Image Region 0 120 7 boundary Region RegionBorder inner dilation circle RegionClipped RegionDilation 2 5
  • Cox-Box变换

    在 回归分析的基本假设 中提到了回归分析中的基本假设 这里的Box Cox变换方法能够解决回归模型中的误差项不服从高斯分布的违例问题 通常这种违例情况出现在 误差 epsilon与预测变量相关的时候 会影响模型结果的精确度 简单的方法就是通
  • 了解redis的单线程模型工作原理?一篇文章就够了

    1 首先redis是单线程的 为什么redis会是单线程的呢 从redis的性能上进行考虑 单线程避免了上下文频繁切换问题 效率高 从redis的内部结构设计原理进行考虑 redis是基于Reactor模式开发了自己的网络事件处理器 这个处
  • 输入一个十进制数,输出其二进制,八进制,十六进制

    a int input 请输入一个十进制整数 print 其对应二进制为 b n八进制为 o n十六进制为 x format a a a
  • Java并发编程面试题——JUC专题

    一 AQS高频问题 1 1 AQS是什么 AQS是JUC下大量工具的基础类 很多工具都基于AQS实现的 比如lock锁 CountDownLatch Semaphore 线程池等等都用到了AQS AQS中有一个核心属性state 还有一个双
  • 基于react+and Design实现下拉框,支持自由输入

    基于react and Design实现下拉框 支持自由输入 以下是基于select的改造方案 使用AutoComplete组件更简单方便一些 AutoComplete这组件的实现方式请移步 基于react and Design实现下拉框
  • mysql 数据库授权(给某个用户授权某个数据库)

    mysql 数据库授权 给某个用户授权某个数据库 版权 1 小唐唐 https blog csdn net qq 38390092 article details 90340804 2 季枫 https www cnblogs com ji
  • PCB设计中常用的尺寸标注

    PCB设计中常用的尺寸标注 原创 凡亿教育 凡亿PCB 凡亿PCB 为了使设计者或生产者更方便地知晓PCB尺寸及相关信息 在设计的时候通常考虑到给设计好的PCB添加尺寸标注 尺寸标注方式分为线性 圆弧半径 角度等形式 下面对最常用的线性标注
  • canteen php,PHP脚本任务优化思路或改进方案?

    脚本部分 date default timezone set PRC require once canteen MySQL php mysql MySQL getInstance localhost root 123456 canteens