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!