wielowątkowy, wielozwojowy robot w PHP

Cześć wszystkim jeszcze raz!

Potrzebujemy pomocy w opracowaniu i wdrożeniu funkcjonalności multi-curl w naszym robocie. Mamy ogromną liczbę „linków do przeskanowania” i rzucamy je z Foreach.

Użyjmy pseudo kodu, aby zrozumieć logikę:

    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.

Teraz musimy zdefiniować maksymalną liczbę połączeń równoległych i móc uruchomić ten proces dla każdego łącza równolegle.

Rozumiem, że będziemy musieli utworzyć kolejkę $ links_being_scanned lub jakąś kolejkę.

Naprawdę nie jestem pewien, jak szczerze podejść do tego problemugdyby ktoś mógł podać jakiś fragment lub pomysł na jego rozwiązanie, byłby bardzo mile widziany.

Z góry dziękuję! Chris;

Rozszerzony:

Właśnie zdałem sobie sprawę, że nie jest to sama skomplikowana funkcja, ale ilość operacji wykonanych przy każdym łączu po żądaniu.

Nawet po muticurl musiałbym ostatecznie znaleźć sposób, aby uruchomić wszystkie te operacje równolegle. Cały opisany poniżej algorytm musiałby działać równolegle.

Tak więc teraz, na nowo, musielibyśmy zrobić coś takiego:

  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;

I każdy skaner robi (to powinno być wykonywane równolegle):

  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

Zakładam, że możemy podejść do tego, tworząc nowy plik PHP za pomocą algorytmu skanera i używając pcntl_fork () dla każdego równoległego procesu?

Ponieważ nawet wykorzystując multi-curl, musiałbym w końcu czekać na pętlę na regularnej strukturze foreach dla innych procesów.

Zakładam, że musiałbym podejść do tego używając fsockopen lub pcntl_fork.

Sugestie, komentarze, częściowe rozwiązania, a nawet „powodzenia” będą bardziej niż doceniane!

Wielkie dzięki!

questionAnswers(4)

yourAnswerToTheQuestion