2016-11-28 15 views
-1

我正在开发一个实时比分网站,我的目标是刷新API请求,每5秒,并对其进行缓存(因为我只有每1000个请求小时),并每5秒更新一次该网站的部分内容。

的API请求在PHP完成,因此是数据的排序。不过,我一直在努力实现API请求的更新部分。我希望我的API请求在后台进行更新,以及一些JavaScript以5秒为基础更新网站,以便每5秒钟可以获取新数据。

我很想得到一些帮助。我想在CRON中做一些事情,但主机不提供每5秒运行一次CRON。任何解决我的问题?如何执行在PHP的API调用每5秒异步

+0

欢迎堆栈溢出。你可以改善你的问题。请阅读[如何提问](http://stackoverflow.com/help/how-to-ask),其中包括“如何以智能方式提问”链接。 – zhon

回答

0

只会运行在一个无限循环的PHP脚本,而不是试图运行它重新每隔5秒的最简单方法。

喜欢的东西:

#!/usr/bin/env php 
<?php 

while (true) { 
    CacheStuff(); 
    sleep(5); 
} 

然后使用像羊群的东西,以防止它运行不止一次触发它在cron。

* * * * * flock -n /var/lock/cache_script.lock /path/to/myscript.php 
1

你可以做到没有cron。像这样的东西会工作:

  • 用户的浏览器发送请求到您的API;
  • 您的API检查缓存中是否存在值(Memcached?),如果它存在 - 从缓存中提供;
  • 如果没有缓存条目,你的API使得输出请求,排序/处理回复,然后比一个cron溶液的至少5秒钟

优势过期时间缓存它 - 如果没有你网站上的活跃用户,没有不必要的传出请求。

您也可以考虑在浏览器端使用WebSockets的。

+0

我的意思是对某个公司的基于livescore的api做一个api请求。缓存该数据,并且当有人加载网站时,它会每隔5秒向缓存发送一次请求,如果缓存存在的时间超过5秒,则会发出新的api请求,并且该数据会再次缓存。这基本上无限循环。 –

+0

@SandiKarajic是的,我理解正确然后我的答案仍然是正确的。与'cron'实现不同,我的方式是按需 - 没有用户,没有负载。有用户 - 有外部API请求 –

0

我的假设: 你不要有cron的,memcached的,Redis的等等(基本存取问题)

样品 可以将数据保存到一个文件作为JSON对象中的任何机会。

例如你的文件名是“5分钟,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