2016-11-28 41 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