我正在开发一个实时评分网站,我的目标是每5秒刷新一次API请求并将其缓存(因为我每小时只有1000个请求)并根据该网站更新部分网站每5秒更改一次API。
API请求在PHP中完成,数据的排序也是如此。但是,我一直在努力实现API请求的更新部分。我希望我的API请求在后台更新,并且一些JavaScript以5秒为基础更新网站,这样我就可以每5秒获取一次新数据。
我很乐意得到一些帮助。我想在CRON中做一些事情,但是主机并不提供每5秒运行一次CRON。我问题的任何解决方案?
答案 0 :(得分:1)
你可以在没有cron的情况下完成。像这样的东西会起作用:
与cron解决方案相比的优势 - 如果您的网站上没有活跃用户,则没有不必要的传出请求。
您也可以考虑在浏览器端使用websockets。
答案 1 :(得分:0)
最简单的方法就是在无限循环中运行php脚本,而不是每隔5秒重新运行一次。
类似的东西:
#!/usr/bin/env php
<?php
while (true) {
CacheStuff();
sleep(5);
}
然后使用像flock这样的东西在cron中触发它以防止它运行多次。
* * * * * flock -n /var/lock/cache_script.lock /path/to/myscript.php
答案 2 :(得分:0)
我的假设: 你没有机会获得cron,memcached,redis等(基本托管问题)
<强>样品强> 您可以将数据作为json对象保存到文件中。
例如您的文件名是“5min-data.json”
所以你的代码可以;
$timeout_sec = 5;
$file_path = '5min-data.json';
if (file_exists($file_path) && ((filemtime($file_path) - time()) < ($timeout_sec * 60))) {
$data = json_decode(file_get_contents($file_path), true);
}
else {
//produce your data here as array, it is only sample
$data = [
'brand' => 'Mazda',
'model' => 'Mzd3',
'year' => 2016,
'weight' => 1234.5,
'airbags' => [
'front-left',
'front-right',
'back-left'
]
];
file_put_contents ($file_path, json_encode($data));
}
//$data is fresh