Multi-Thread-, Multi-Curl-Crawler in PHP

Hallo allerseits noch einmal!

Wir benötigen Unterstützung bei der Entwicklung und Implementierung einer Multi-Curl-Funktionalität in unserem Crawler. Wir haben eine riesige Auswahl an "zu scannenden Links" und schleifen sie mit einem Foreach.

Verwenden wir einen Pseudocode, um die Logik zu verstehen:

    1) While ($links_to_be_scanned > 0).
    2) Foreach ($links_to_be_scanned as $link_to_be_scanned).
    3) Scan_the_link() and run some other functions.
    4) Extract the new links from the xdom.
    5) Push the new links into $links_to_be_scanned.
    5) Push the current link into $links_already_scanned.
    6) Remove the current link from $links_to_be_scanned.

Jetzt müssen wir eine maximale Anzahl paralleler Verbindungen definieren und diesen Prozess für jede Verbindung parallel ausführen können.

Ich verstehe, dass wir eine $ links_being_scanned oder eine Art Warteschlange erstellen müssen.

Ich bin mir wirklich nicht sicher, wie ich dieses Problem angehen soll, um ehrlich zu sein.Wenn jemand einen Ausschnitt oder eine Idee zur Lösung bereitstellen könnte, wäre er sehr dankbar.

Danke im Voraus! Chris;

Verlängert:

Mir ist gerade klar geworden, dass nicht das Multi-Curlen selbst der heikle Teil ist, sondern die Menge der Operationen, die mit jedem Link nach der Anfrage ausgeführt werden.

Selbst nach dem Muticurl müsste ich irgendwann einen Weg finden, um all diese Operationen parallel auszuführen. Der gesamte unten beschriebene Algorithmus müsste parallel ablaufen.

Wenn wir jetzt überdenken, müssten wir so etwas tun:

  While (There's links to be scanned)
  Foreach ($Link_to_scann as $link)
  If (There's less than 10 scanners running)
  Launch_a_new_scanner($link)
  Remove the link from $links_to_be_scanned array
  Push the link into $links_on_queue array
  Endif;

Und jeder Scanner tut dies (dies sollte parallel ausgeführt werden):

  Create an object with the given link
  Send a curl request to the given link
  Create a dom and an Xdom with the response body
  Perform other operations over the response body
  Remove the link from the $links_on_queue array
  Push the link into the $links_already_scanned array

Ich gehe davon aus, dass wir mit dem Scanner-Algorithmus eine neue PHP-Datei erstellen und pcntl_fork () für jeden parallelen Prozess verwenden könnten.

Da ich sogar Multi-Curl verwendet habe, müsste ich eventuell warten, bis ich eine reguläre Foreach-Struktur für die anderen Prozesse gefunden habe.

Ich nehme an, ich müsste dies mit fsockopen oder pcntl_fork angehen.

Vorschläge, Kommentare, Teillösungen und sogar ein "Viel Glück" werden mehr als geschätzt!

Danke vielmals!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage