rastreador multi-thread multi-curl em PHP

Olá a todos mais uma vez!

Precisamos de ajuda para desenvolver e implementar uma funcionalidade de várias curvas em nosso rastreador. Nós temos uma enorme variedade de "links para serem escaneados" e nós os lançamos com um Foreach.

Vamos usar um pseudo código para entender a lógica:

    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.

Agora, precisamos definir um número máximo de conexões paralelas e poder executar esse processo para cada link em paralelo.

Eu entendo que teremos que criar um $ links_being_scanned ou algum tipo de fila.

Eu realmente não tenho certeza de como abordar este problema para ser honesto,Se alguém pudesse fornecer algum trecho ou idéia para resolvê-lo, seria muito apreciado.

Desde já, obrigado! Chris;

Estendido:

Acabei de perceber que não é o multi-curl-se a parte complicada, mas a quantidade de operações feitas com cada link após o pedido.

Mesmo depois do muticurl, eu eventualmente teria que encontrar uma maneira de executar todas essas operações em paralelo. Todo o algoritmo descrito abaixo teria que ser executado em paralelo.

Então, agora repensando, teríamos que fazer algo assim:

  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;

E cada scanner faz (Isso deve ser executado em paralelo):

  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

Eu suponho que poderíamos abordar isso criando um novo arquivo PHP com o algoritmo do scanner, e usando pcntl_fork () para cada processo paralelo?

Como mesmo usando multi-curl, eu eventualmente teria que esperar o loop em uma estrutura foreach regular para os outros processos.

Eu suponho que eu teria que abordar isso usando fsockopen ou pcntl_fork.

Sugestões, comentários, soluções parciais e até mesmo uma "boa sorte" serão mais do que apreciadas!

Muito obrigado!

questionAnswers(4)

yourAnswerToTheQuestion