2010-02-12 22 views
1

我最近研究了使用curl進行多個請求的可能性。我可能不完全理解它,所以我只是希望澄清一些概念。使用PHP的異步/並行HTTP請求curl_multi

如果您從多個來源獲取內容,這絕對是一個不錯的選擇。這樣,您可以開始處理速度更快的服務器的結果,同時仍然等待較慢的服務器。如果您從同一臺服務器請求多個頁面,是否仍然有意義?服務器仍然會在同一時間向多個頁面提供同一個客戶端?

回答

4

您不能在PHP中執行多線程,因此您將無法在其他人正在檢索時開始處理一個頁面。在所有頁面被檢索或超時之前,多捲曲不會返回控制。因此,只需要檢索最慢的頁面即可。你將從串行(捲曲)到平行(multi_curl),這仍然會給你一個很大的提升。

服務器將爲同一個客戶端提供多個頁面,達到一定的配置限制。從服務器請求5-10頁會很好。

0

認爲大部分或全部服務器將一次向同一客戶端提供多個頁面。您可以爲您的連接設置一個合理的超時時間,如果連接失敗,請將其推送到您的連接陣列上,以便在所有其他連接完成後重新嘗試連接。這樣你一次至少可以得到一個,即使它總是試圖獲得幾個。那有意義嗎? :)

0

某些服務器可能配置爲防禦性行爲,如果過多的連接或請求是從它認爲是相同的客戶端。它可能會執行諸如丟棄/拒絕連接,限制所有連接之間的某個總計帶寬或其他事物的帶寬。

無論如何,要體貼如你想要一個網絡爬蟲考慮到您的網站,並儘量不要一次性轟炸一臺服務器。

如果您需要從5個不同的服務器中分別抓取5個頁面,那麼如果您直到完成,每個服務器使用1個連接,則直到完成5次連接纔會完成。

1

檢查this out,這個人做了一個腳本,它與curl_multi異步工作。我一直在玩幾個小時,它運作良好。