2011-10-06 130 views
3

我想知道在PHP中執行併發HTTP請求的最佳方式是什麼?我有很多數據要獲取,我寧願一次執行多個請求來檢索所有數據。PHP併發HTTP請求?

有人知道我該怎麼做嗎?最好在匿名/回撥功能mannor ...

謝謝,

湯姆。

+2

像['curl'](http://php.net/curl)['http'](http: //php.net/http)擴展也提供了併發請求,使用['HttpRequestPool'](http://php.net/HttpRequestPool)類(它反過來只是在幕後使用curl)。 – mario

+0

可能的重複:http://stackoverflow.com/questions/1240267/asynchronous-http-requests-in-php – igorw

+0

可能的重複[在PHP中使用PECL HTTP類的並行HTTP請求\ [答案:HttpRequestPool類\]](http ://stackoverflow.com/questions/168951/parallel-http-requests-in-php-using-pecl-http-classes-answer-httprequestpool-cl) – mario

回答

9

您可以使用curl_multi,它在內部觸發單個捲曲句柄下的多個單獨請求。除非通過嚴重的黑客攻擊(多個並行腳本,一個腳本通過exec()啓動多個後臺任務,否則PHP本身並不以任何方式/形狀/形式「多線程」,並且不允許事件並行運行。等等...)。

0

可以使用HttpRequestPool http://www.php.net/manual/de/httprequestpool.construct.php

$multiRequests = array(
    new HttpRequest('http://www.google.com', HttpRequest::METH_GET), 
    new HttpRequest('http://www.yahoo.com', HttpRequest::METH_GET) 
    new HttpRequest('http://www.bing.com', HttpRequest::METH_GET) 
); 

$pool = new HttpRequestPool(); 
foreach ($multiRequests as $request) 
{ 
    $pool->attach($request); 
} 

$pool->send(); 

foreach($pool as $request) 
{ 
    echo $request->getResponseBody(); 
} 
+0

測試此代碼時出現此錯誤:致命錯誤:類找不到'HttpRequest'。 –

+0

您可能正在使用pecl_http的第2版。如果你想使用HttpRequest,你需要安裝pecl_http 1.7.6,我想。版本2已經完全重寫了很多年,但php.net上的文檔引用了版本1 –

1

或者,如果你願意,你可以把你的數據作爲JSON。在PHP中,你可以重新整理所有的值。例如。

xhttp.open("GET", "gotoChatRoomorNot.php?q=[{"+str+"},{"+user1+"},{"+user2"}]", true); 

,並在PHP中,你可以按照這個讓您的數據備份:How do I extract data from JSON with PHP?

因此,請在JSON格式的字符串並通過HTTP發送整個事情。 我認爲你可以使用xml執行同樣的行爲,但我不知道xml