我想知道在PHP中執行併發HTTP請求的最佳方式是什麼?我有很多數據要獲取,我寧願一次執行多個請求來檢索所有數據。PHP併發HTTP請求?
有人知道我該怎麼做嗎?最好在匿名/回撥功能mannor ...
謝謝,
湯姆。
我想知道在PHP中執行併發HTTP請求的最佳方式是什麼?我有很多數據要獲取,我寧願一次執行多個請求來檢索所有數據。PHP併發HTTP請求?
有人知道我該怎麼做嗎?最好在匿名/回撥功能mannor ...
謝謝,
湯姆。
您可以使用curl_multi,它在內部觸發單個捲曲句柄下的多個單獨請求。除非通過嚴重的黑客攻擊(多個並行腳本,一個腳本通過exec()啓動多個後臺任務,否則PHP本身並不以任何方式/形狀/形式「多線程」,並且不允許事件並行運行。等等...)。
您可以嘗試要麼curl_multi()或使用較低級別的功能socket_select()
可以使用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();
}
測試此代碼時出現此錯誤:致命錯誤:類找不到'HttpRequest'。 –
您可能正在使用pecl_http的第2版。如果你想使用HttpRequest,你需要安裝pecl_http 1.7.6,我想。版本2已經完全重寫了很多年,但php.net上的文檔引用了版本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
像['curl'](http://php.net/curl)['http'](http: //php.net/http)擴展也提供了併發請求,使用['HttpRequestPool'](http://php.net/HttpRequestPool)類(它反過來只是在幕後使用curl)。 – mario
可能的重複:http://stackoverflow.com/questions/1240267/asynchronous-http-requests-in-php – igorw
可能的重複[在PHP中使用PECL HTTP類的並行HTTP請求\ [答案:HttpRequestPool類\]](http ://stackoverflow.com/questions/168951/parallel-http-requests-in-php-using-pecl-http-classes-answer-httprequestpool-cl) – mario