2010-06-23 14 views
1

J'ai un script php qui se résume à ce qui suit:PHP multithread CURL capacité Question

while ($arr = mysql_fetch_array($result)) 
{ 
    $url = $arr['url']; 
    exec("curl $url > /dev/null &"); 
} 

$ url représentera un script distant.

Ma question est, que puis-je attendre si j'essaye de parcourir 2000 URLs.

L'ouverture de nombreuses connexions CURL va-t-elle paralyser mon serveur? Puis-je tirer tous les 2000 en moins d'une minute? Ce que j'essaie de faire est d'empêcher mes utilisateurs d'avoir à configurer cronjobs en ouvrant des connexions et en exécutant leurs scripts à distance pour eux.

Pouvez-vous nous conseiller? Je suis hors de ma ligue aujourd'hui.

Hudson

+0

C'est beaucoup de CURLs x_x – Polaris878

Répondre

3

Jetez un oeil à curl_multi_init. Il ne déclenchera pas plusieurs processus, il devrait donc être plus souple sur votre serveur.

Je vous conseille de tirer seulement 3-15 à la fois, en fonction de la charge que le serveur peut gérer et de la complexité des scripts. 2000 à la fois vous fera probablement manquer de descripteurs de fichiers ou d'autres limites.

+0

Il peut effectivement être plus propre et tout aussi rapide pour nous exec ("curl $ url>/dev/null &"); Parce que>/dev/null & ne tient pas compte de la nécessité d'avoir sortie terminée avant de se déplacer Je ne suis pas certain: – atwellpub

+0

@atw Vous pouvez configurer curl pour envoyer une requête HEAD à la place, puis les serveurs distants n'enverront que des en-têtes, que vous pouvez ignorer de toute façon (envoi à/dev/null – Artefacto

+0

Dites que le script distant prend trois minutes pour terminer (compilateur de données) le HEAD renvoyé agirait-il comme une confirmation de lecture, tout en garantissant que la connexion restera ouverte pendant les 3 minutes entières? – atwellpub

1

Vous devez garder un œil sur le nombre de opened files (connexions) afin de ne pas atteindre la limite de fichier maximum sur votre serveur.