2010-02-09 5 views
7

begrenzen Ich machte einen einfachen Web-Crawler mit PHP (und CURL). Es analysiert ungefähr 60 000 HTML-Seiten und ruft Produktinformationen hervor (es ist ein Werkzeug in einem Intranet).Wie gleichzeitige Verbindungen von cURL

Mein Hauptanliegen ist die gleichzeitige Verbindung. Ich möchte die Anzahl der Verbindungen begrenzen, also würde der Crawler niemals mehr als 15 gleichzeitige Verbindungen verwenden.

Der Server blockiert die IP immer wenn das Limit von 25 gleichzeitigen Verbindungen durch IP erreicht ist und aus irgendeinem Grund kann ich das auf der Serverseite nicht ändern, also muss ich einen Weg finden, mein Skript nie mehr zu verwenden als X gleichzeitige Verbindungen.

Ist das möglich?

Oder vielleicht sollte ich das Ganze in einer anderen Sprache umschreiben?

Vielen Dank, jede Hilfe wird geschätzt!

Antwort

5

Nun können Sie curl_set_opt(CURLOPT_MAXCONNECTS, 15); verwenden, um die Anzahl der Verbindungen zu begrenzen. Vielleicht möchten Sie aber auch einen einfachen Verbindungsmanager erstellen, wenn dies nicht für Sie erledigt ist.

+1

Ich weiß nicht, ob ich mich fühlen sollte, oder ganz dumm! Ich war mir dieser Option nicht bewusst, aber ich schwöre, dass ich alle cURL-Dokumente gelesen habe ... mehr als einmal! Nevermind, werde ich mein Ergebnis veröffentlichen. Vielen Dank mein Freund! – josephdotca

0

Vielleicht eine einfache Verbindungstabelle schreiben:

target_IP   | active_connections 

1.2.3.4     10 
4.5.6.7     5 

jeder curl Aufruf die Anzahl der Verbindungen erhöhen würde, jeder es in der Nähe verringern.

Sie können die Tabelle in einer mySQL-Tabelle oder Memcache für Geschwindigkeit speichern.

Wenn Sie auf eine IP-Adresse stoßen, die bereits über maximale Verbindungen verfügt, müssen Sie eine "try later" -Warteschlange implementieren.