- 31
- 0
题目描述
系统中有一批活动,本程序的目的是获取活动的缓存,然后判断缓存格式是否正确。
题目来源及自己的思路
所有功能都是基于现有的 API 接口来实现的,基本思路:
- 先登录,获取 Token,后面的接口都需要使用,使用的是 Guzzle 客户端,同步的方式
- 获取活动总数,因为获取活动记录的接口是分页的,没有办法一次获取到全部的活动信息,根据总数进行分页查询
- 分页获取活动记录,每页 10 条记录,大概几百页
- 循环获取每个活动的缓存,并判断和缓存规则是否一致,如果不一致则发送钉钉群通知;
如果按照普通 PHP 程序的写法,就按照上面的逻辑写就可以了,问题就是进行一次完整的检测时间比较长,例如有 1000 个活动,分页请求活动数据需要 100 次请求,请求缓存又需要 1000 次请求,总共 1100 次,如果每次请求 500ms,也需要 550 秒。
使用 Swoole 的协程模式,我的思路是先通过同步的方式获取到 Tokne 和活动总数,然后开启协程分页请求活动数据,然后循环每次请求的活动数据,再在协程中请求缓存数据。
相关代码
<?php
require 'vendor/autoload.php';
require 'PromotionRecords.php';
require 'PromotionTotal.php';
require 'PromotionCache.php';
require 'Code.php';
require 'Login.php';
require 'Ding.php';
const SERVER = 'http://promotion.abc.com';
// 登录,获取 Token
$login = new Login();
$token = $login->getToken();
if (empty($token)) { // 登录失败
var_dump('Login Failed.');
exit();
}
// 获取活动总数
$promotionTotal = new PromotionTotal($token);
$promotion_total = $promotionTotal->getPromotionTotal();
// 分页获取活动记录
// 总页数
$page_total = ceil($promotion_total / Code::PAGE_COUNT);
for ($page = 1; $page <= $page_total; $page++) {
go(function () use ($token, $page) {
$promotionRecords = new PromotionRecords($token);
$promotion_records = $promotionRecords->getPromotionRecords($page, Code::PAGE_COUNT);
// 循环活动验证缓存格式是否正确
foreach ($promotion_records as $promotion_record) {
$promotion_record_id = $promotion_record['promotion_id'];
$promotion_record_type_id = $promotion_record['promotion_type_id'];
go(function () use ($token, $promotion_record_id, $promotion_record_type_id) {
$promotion_cache = new PromotionCache($token);
$error = $promotion_cache->verify($promotion_record_id, $promotion_record_type_id);
if (! empty($error)) {
// 初始化钉钉消息发送类
$ding = new Ding();
$ding->send($promotion_record_id, $error);
}
});
}
});
}
你期待的结果是什么?实际看到的错误信息又是什么?
我想知道这种思路是否正确,还有更好的方法吗?
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
