2017-06-28 28 views
0

我在我的網站上有一個ajax表單,它向這個php文件發送很多請求以獲取一些信息。如何在php中創建隊列來管理請求?

如何在這個php文件中創建一個隊列來處理每秒1個請求,而不是更多?

php文件:

<?php 
function isJson ($str) { 
    json_decode($str); 
    return (json_last_error() == JSON_ERROR_NONE); 
} 
$service_url = 'https://example.com/api-local-json.php?cmd=whois&domain='.$_GET['domain']; 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $service_url); 
curl_setopt($curl, CURLOPT_TIMEOUT, 29); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$curl_response = curl_exec($curl); 
if(!$curl_response){ 
    echo '{"result": "error"}'; 
} 
curl_close($curl); 
if (isJson($curl_response)) { 
    echo $curl_response; 
} else { 
    echo '{"result": "error"}'; 
} 

回答

1

這可以被認爲是在PHP節流的概念。您可以簡單地選擇在連續的請求之間延遲。 Like sleep(5);這可以使用一旦你提出請求,然後它會等待5秒鐘。

或者您可以實施提供這些排隊,信息經紀和工作人員處理功能的鬆弛設備,gearmean或rabbitmq。

+0

謝謝,使用sleep();是個好主意。但是當我在我的php腳本的第一行(和其他行)使用它時,它只是延遲第一個請求和所有其他請求一起處理,並使服務器再次加載。 –

+1

在一個完整的請求之後使用它,比如你可以像循環一樣使用它,一開始它會在sleep()之後運行,然後從第二個請求開始它將會有sleep()。 – Niharikaa

+0

好的,但在這種情況下,我想爲所有使用我的網頁與多個IP地址和......以避免服務器負載的隊列。我可能需要一個數據庫隊列或類似的東西。但我不知道該怎麼做。你有什麼想法的傢伙? –